JavaScript 的 const 竟然不完全是变量不变

阅读时长 3 分钟读完

JavaScript 的 const 竟然不完全是变量不变

在 JavaScript 中,声明一个变量通常有三种方式:var、let 和 const。其中,const 声明的变量被认为是一个常量,其值在声明后不能再次被改变,因此被广泛用于存储不变的数据。

然而,随着多年使用经验的积累,我们发现 const 竟然不完全是变量不变。在实际应用中,我们会遇到一些 const 声明的变量在值被赋值后仍然能够被修改的情况,而这并不是一个 bug,而是一个功能。

那么,const 到底有多少种方式可以被修改呢?下面我们来一一探究。

第一种:对象属性的赋值

声明一个 const 变量时,如果变量被赋值为一个对象,那么虽然该变量不能被重新赋值,但是对象属性却可以被修改。

示例代码:

在上面的代码中,我们声明了一个 const 变量 person,并将它赋值为一个对象。虽然 person 变量不能被重新赋值,但是我们可以修改该对象的 age 属性。

第二种:数组元素的赋值

和对象属性类似,当 const 变量被赋值为一个数组时,数组元素也可以被修改。

示例代码:

在上面的代码中,我们声明了一个 const 变量 arr,并将它赋值为一个数组。虽然 arr 变量不能被重新赋值,但是我们可以修改该数组的元素。

第三种:全局对象的属性赋值

在浏览器环境中,window 对象是全局变量,可以通过 window.xxx 的方式访问对象的属性。在 Node.js 环境中,global 对象是全局变量,可以通过 global.xxx 的方式访问对象的属性。

因此,当 const 变量被赋值为全局对象的属性时,该属性也可以被修改。

示例代码:

在上面的代码中,我们声明了一个 const 变量 FLAG,并将它赋值为一个对象。虽然 FLAG 变量不能被重新赋值,但是我们可以通过 window 对象来修改该对象的 color 属性。

结论

综上所述,const 变量虽然不能被重新赋值,但是它所包括的对象属性、数组元素和全局对象属性却可以被修改。在实际编码过程中,我们需要根据这种特性来合理运用 const 变量,防止出现不必要的错误。

参考文献

  • 阮一峰《ECMAScript 6 入门》
  • MDN Web Docs:const

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

纠错
反馈