当前位置: 首页 > 科技观察

说说Const和Object.freeze()的区别

时间:2023-03-19 13:09:28 科技观察

本文介绍了在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//这里会抛出TypeError错误}试图改变一个用const定义的变量的值会导致这个错误:constfruites=['葡萄','哈密瓜']fruites.push('香蕉')console.log(fruites)//["葡萄","哈密瓜","香蕉"]constconstants={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:"UnknownApp"}控制台。log(constants.APP_NAME);//"UnknownApp"总结:const不允许改变对象或数组的引用,但可以改变它的值。Object.freeze()忽略对象或数组的值变化将它们组合在一起将防止更改对象或数组的引用和值使用constwithObject.freeze()constconstants=Object.freeze({APP_NAME:"CodingNConcepts"});constants.APP_NAME="UnknownApp";//这个被忽略constants={APP_NAME:"UnknownApp"};//这个会抛出一个TypeError上面的例子说明使用constwithObject.freeze()在JS中非常有用用于定义常量和配置。作者:AshishLahoti译者:前端小智来源:codingnconcepts原文:https://codingnconcepts.com/javascript/const-vs-object-freeze/二维码关注。转载本文请联系大千世界公众号。