万万没想到!ES6的const并非一定为常量

阅读时长 3 分钟读完

在ES6中,const关键字被用来声明常量,我们通常认为这意味着一旦一个变量被声明为常量后,它的值将无法被更改。但是,实际情况并不总是这样。

常量并不总是恒定不变的

首先,我们需要明确一点:使用const并不总是保证变量的值不可更改。虽然const声明的变量不能被重新赋值,但如果该变量引用的对象是可变的,则该对象的属性仍然可以被更改。让我们看下面这个例子:

尽管 myObj 被声明为 const,但其 message 属性的值却被成功地更改了。这是因为 myObj 只是一个指向对象的引用,而不是对象本身。因此,即使使用 const 声明了 myObj,也只是保证了该引用不会被更改,而不是引用指向的对象本身。

如何创建真正的常量

要创建一个真正的常量,可以使用“冻结”(freeze)方法来使对象成为不可变的。当一个对象被冻结之后,它的属性值将不能被更改。让我们看下面这个例子:

在这个例子中,我们使用 Object.freeze() 方法来冻结了 myObj 对象。这意味着我们无法修改其属性值。尝试修改时会抛出一个错误。

深入理解 const

在实际开发中,我们要牢记的是,const关键字只是用来声明常量标识符的一种方式。它并不代表着该变量引用的对象是不可变的。换言之,const 只保证了变量标识符指向的内存地址不会被重新赋值。

如果您想确保一个对象彻底不可变,可以使用 Object.freeze() 方法。此外,在编写代码时,始终要考虑可能会影响某个变量的任何行为,并且避免使用具有潜在副作用的函数和操作符。

结论

在本文中,我们介绍了ES6中const关键字的用途以及其局限性。虽然const可以用于声明常量,但它并不保证所声明变量引用的对象是不可变的。要创建真正的常量,需要使用Object.freeze()方法来冻结对象。在编写代码时,请始终注意可能会影响变量行为的任何操作,并尽可能地避免具有潜在副作用的函数和操作符。

希望本文能够帮助您更好地理解ES6中const关键字的含义,并应用于实际开发中。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/36680

纠错
反馈

纠错反馈