【发布时间】:2021-07-30 10:39:30
【问题描述】:
我遇到了一个有趣的概念,其中 const number、string、Boolean 与 Object、arrays 的行为不同。
const num1 = 10
num1 = 20 //throws error
const arr1 = [1,2,3,4]
arr1.push(5) //works
arr1.pop() //works
arr1[2] = 7 //works
arr1 = [2,3] //throws error
对于array 和objects,它允许更改值,但会在赋值中引发错误。这是否意味着,将object 或array 声明为const 没有任何优势,因为您可以随时更改所有值?
如果有人能解释一下,我想知道,const 在幕后是如何工作的?
【问题讨论】:
-
Object.freeze()可能就是您所追求的。const用于防止重新分配,但仍可用于对象/数组 -
const表示变量不能重新赋值。就是这样。它不会使值不可变。 -
一个对象(一个数组也是一个对象)实际上是一个指针..
const意味着你不能弄乱那个指针,但是里面的值可以被操纵..arr可以一个常量,但arr[0]不会是 -
所有原语都是不可变的,即使使用 let 或 var。
var a = 'hello'; a[0] = 'y'; console.log(a) // 'hello; -
另外,我不明白你为什么说
const工作方式不同。num1 = 20 //throws error和arr1 = [2,3] //throws error是相同的操作。重新分配。在这两种情况下,它们都是不允许的。arr1.push(5) //works不是重新分配。
标签: javascript arrays object ecmascript-6 constants