阿尔卑斯丶
圣骑士
圣骑士
  • 最后登录2023-11-03
  • 发帖数59
  • 社区居民
  • 原创写手
阅读:6863回复:1

[js]const声明的值真的是无法改变的吗?

楼主#
更多 发布于:2018-12-20 17:12
在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 = {}
这样就会出现报错,因为不能将它指向另一个地址。


最新喜欢:

sunshinesunshi...
sunshine
管理员
管理员
  • 最后登录2023-10-30
  • 发帖数170
  • 社区居民
沙发#
发布于:2018-12-21 12:35
可以的哦
游客


返回顶部

公众号

公众号