在JavaScript中,为什么不能修改常量String,但可以修改常量数组

rrc*_*709 4 javascript arrays const

const name = 1;
name = 2;
Run Code Online (Sandbox Code Playgroud)

执行此JavaScript时出现错误:

TypeError: Assignment to constant variable.
    at Object.<anonymous> (/home/user01/JavaScript/scope.js:2:6)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:191:16)
    at bootstrap_node.js:612:3
Run Code Online (Sandbox Code Playgroud)

但是,在执行以下语句时,代码会成功执行.

const arr = [1,2,3];
arr[1] = 5;
Run Code Online (Sandbox Code Playgroud)

为什么我们能够修改数组,即使它被声明为常量.

Aur*_*ílý 5

因为数组本身没有改变,所以它仍然是相同的数组.在类C语言中,与此类似的是一个常量指针(对于内存中的某个地址) - 您无法更改指针所指向的位置,但内存可以写入相同的内容.

在JavaScript中,这个指针般的行为适用于任何不是原始(即Number,Boolean,String...),这基本上是数组和对象.如果你想知道为什么String是一个原语,那是因为在JavaScript中字符串是不可变的.