|
在ES6中,新增了两个声明的命令,分别是let和const,很多人都说const声明的是常量,既然是常量,那么真的都是无法进行改变的吗?
事实上,const并不是保证变量的值不变,而是变量指向的那个内存地址所保存的数据不得改动。那么既然这么说了,那岂不是不那么确定啦?!是的 对于基本数据类型(数值、字符串、布尔值)来说,好像确实是这样的,因为它们的值就保存在变量指向的那个内存地址,因此等同于常量。 那么对于引用数据类型,特别是数组和对象来说,变量指向的内存地址,保存的只是一个指向实际数据的指针。那么问题就来了呀,既然const只能保证这个指针是固定的(即总是指向另一个固定的地址),那岂不是嘿嘿嘿~~~~~ const foo = {};我const了一个空对象,这个就一直是个空对象了吗?const foo = {};
foo.name = 'Dwyane';
foo.age = 20;
console.log(foo)这样一来,打印出来的值就是一个包含name和age的对象了。那么这样是不是就说明对象完全变了呢?其实也不是,对象的不可变的只是这个地址,即不能把foo指向另一个地址,也就是说我把这个对象指向另一个地址就会报错 const foo = {};
foo.name = 'Dwyane';
foo.age = 20;
foo = {}这样就会出现报错,因为不能将它指向另一个地址。 |
|
最新喜欢: |