很多人看到const声明的对象类型的变量被修改了,感到很奇怪。
其实,我们所讲的使用const声明的变量不可以被修改,严格意义上来说是保存变量值的内存地址不能被修改。
对于基本类型的变量来说,变量就保存着内存地址的值,所以不能直接修改;
而对于引用类型的变量来说,变量保存的是一个指向数据内存地址的指针,只要该指针固定不变,我们就可以改变数据本身的值。
const person = { age: 12 }; person.name = 'andy'; person.age = 13; console.log(person); // {age: 13, name: 'andy'} person = {age: 12}; // TypeError: Assignment to constant variable.
在上面这个示例中,我们使用const定义了一个person变量,而且这个变量的值是“对象类型”,不管是新增属性还是修改属性,都能正常输出。
但是最后一行我们重新给person变量赋值的时候,就抛出异常。因为保存变量值的内存地址被修改了。