当前位置: 首页 > 后端技术 > Node.js

const和Object.freeze()有什么区别?

时间:2023-04-03 21:27:03 Node.js

作者:AshishLahoti译者:前端小智来源:codingnconcepts点赞再看,微信搜索【大千世界】,B站关注【前端小智】这不是大厂背景,但是有一个向上的积极态度。本文已收录到GitHubhttps://github.com/qq44924588...,文章已分类,也整理了很多我的文档和教程资料。最近开源了一个Vue组件,但是还不够完善。欢迎大家一起完善,也希望大家能给个star支持一下。谢谢。github地址:https://github.com/qq44924588...本文介绍在JS中使用const和Object.freeze()定义常量和配置值的一些做法,以及它们之间的区别。当我们在JS应用中定义常量和配置值时。它们应该具有以下特点:跨应用可访问量的值是不可变的对变量的引用应该是不可变的接下来,我们一一看一下以上三个特点。使用let我们使用let来定义变量。letAPP_NAME="前端小智@大运世界"functiongetApplicationName(){APP_NAME="他是谁?"returnAPP_NAME}getApplicationName()//“他是谁?”在上面的例子中,函数getApplicationName()改变了APP_NAME的值。我们如何防止全局变量被更改?使用const是不是可以使用const来定义,这样全局变量就不会被改成?constAPP_NAME="前端小智@大运世界"functiongetApplicationName(){APP_NAME="他是谁?"returnAPP_NAME//TypeErrorwillbethrownhere}尝试更改使用const定义的变量的值将导致此错误:“TypeError:Assignmenttoconstantvariable.”const可以防止变量值被改变吗?,见如下操作:{APP_NAME:"前端小智@大运世界"}constants.APP_NAME="他是谁?"console.log(constants.APP_NAME)//他是谁?从上面两个例子我们可以看出,即使使用const,也可以改变数组或对象的值。const不是利用变量的值不可变,而是利用变量的引用地址可变。现在我们知道,在数组和对象的情况下,我们不能更改引用,但可以更改值。如何防止数组和对象的值被改变?使用Object.freeze()这是Object.freeze()发挥作用的地方,Object.freeze忽略对象和数组的值更改。letconstants=Object.freeze({APP_NAME:"前端小智@大运世界"})constants.APP_NAME="他是谁?"console.log(constants.APP_NAME)//"前端小智@大运世界"从例子中可以看出,改变值不会抛出任何错误,也不会影响对象状态。Object.freeze()可以防止对象的值被改变,但是不能阻止引用的改变:letconstants=Object.freeze({APP_NAME:"首页小智@大运世界"})constants={APP_NAME:“未知应用”}console.log(constants.APP_NAME);//“UnknownApp”总结:const不允许更改对对象或数组的引用,但可以更改它们的值。Object.freeze()忽略对象或数组的值变化将它们组合在一起将阻止对象或数组的变化引用和值与const和Object.freeze()一起使用constconstants=Object.freeze({APP_NAME:"CodingN概念"});constants.APP_NAME="UnknownApp";//这是被忽略的constants={APP_NAME:"UnknownApp"};//thiswillthrowTypeError上面的例子表明结合const和Object.freeze()使用对于在JS中定义常量和配置很有用。代码部署后可能存在的bug,无法实时获知。事后为了解决这些bug,花费了大量的时间在日志调试上。顺便推荐一个好用的bug监控工具Fundebug。原文:https://codingnconcepts.com/j...每周更新交流文章。可以微信搜索“大千世界”阅读即时更新(比博文早一两篇)。这篇文章在GitHubhttps://github.com/qq449245884/xiaozhi已经收录,整理了很多我的文档。欢迎star和改进。可以参考考点面试。另外,关注公众号,后台会回复福利,看到福利就知道了。