人生不是一种享乐,而是一桩十分沉重的工作。 —— 列夫·托尔斯泰
作者:Ashish Lahoti
译者:cl9000
来源:https://codingnconcepts.com/javascript/const-vs-object-freeze/
这篇文章介绍了使用const
和定义JavaScript
中的常量和配置值的最佳做法,Object.freeze()
以及它们之间的区别。
当我们在JavaScript
应用程序中定义常量和配置值时。它们应具有以下特征:
- 跨应用程序可访问
- 变量的值应该是不可变的
- 变量的引用应该是不可变的
现在,我们将尝试实现这些特征……
使用let
让我们使用来定义变量let
,看看
1 | let APP_NAME = "Coding N Concepts"; |
在上面的示例中,函数getApplicationName()
已更改的值APP_NAME
。我们如何防止更改全局变量的值?
使用const
我们可以使用const
定义一个常量变量来代替let
防止其更改值。
1 | const APP_NAME = "Coding N Concepts"; |
尝试更改使用const
结果定义的变量的值,导致此错误:
“TypeError: Assignment to constant variable.”
就是这样吗?让我们看下输出
1 | const fruits = ['mango', 'apple']; |
1 | const constants = { |
从上面的两个例子中可以看出,即使使用const,也可以改变数组或对象的值。
const
不会使变量的值不可变,而是使变量的绑定不可变。
所有基本类型都喜欢
integer,boolean
并且通过值string
绑定数据,而所有类型都喜欢array
并且通过引用object
绑定数据。
现在我们知道,在 array
和的情况下 object
,我们不能更改引用,但可以更改值。
那么我们如何防止改变 array
的值 object
呢?
使用Object.freeze()
这是Object.freeze()
发挥作用的地方。Object.freeze
忽略值的变化object
和array
。
1 | let constants = Object.freeze({ |
您可以在示例中看到,如果您尝试更改值,它不会引发任何错误,但不会影响对象状态。
Object.freeze()
可以防止更改对象的值,但不能阻止引用的更改:
1 | let constants = Object.freeze({ |
如果我们总结一下:
const
不允许更改的引用,object
或者array
可以更改值。
Object.freeze()
忽略object
或array
的值变化
把它们组合在一起将防止更改对象或数组的引用和值
一起使用const和Object.freeze()
1 | const constants = Object.freeze({ |
上面的示例显示了将 const
和组合在一起 Object.freeze()
对于在 JavaScript
中定义常量和配置非常有用。
参考原文
原文:https://codingnconcepts.com/javascript/const-vs-object-freeze/
赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!