ES6 const 介绍-阿里云开发者社区

开发者社区> 云计算> 正文

ES6 const 介绍

简介: 使用const语法创建变量,一旦创建成功,就不能改变它们的值,因此我们称为常量。如果你尝试改变一个const变量,则会抛出异常 const a = 2; a = 3 VM27863:1 Uncaught TypeError: Assignment to constant variable. at <anonymous>:1:3 原理:阻隔变量所对应内存地址被改变 ES6在对变量的引用进行读取时,会从该变量当前所对应的内存地址所指向内存空间中读取内容。

使用const语法创建变量,一旦创建成功,就不能改变它们的值,因此我们称为常量。如果你尝试改变一个const变量,则会抛出异常

const a = 2;
a = 3
VM27863:1 Uncaught TypeError: Assignment to constant variable.
    at <anonymous>:1:3

原理:阻隔变量所对应内存地址被改变

ES6在对变量的引用进行读取时,会从该变量当前所对应的内存地址所指向内存空间中读取内容。当变量改变时,引擎会重新从内存分配一个新的内存以存储新值,并将新值的内存地址与变量进行绑定。const的原理便是在变量名与内存地址时间建立不可变的绑定。

可变的对象变量

const obj = {name: 111}
obj.name = 222
这样是可以改变的,改变的只是对象属性的值,对象本身的地址引用并没有改变,所以不报错

obj = {age: 12}
这样就会报错,因为尝试去改变obj的地址引用

如何让对象的属性不可变呢

可以用Object.freeze(),该方法为浅冻结

const obj = Object.freeze({
  name: 222,
  school: {
    name: '学校'
  }
})
obj.name = 333 // 不会有任何变化,严格模式下会报错
obj.school.name = 'jj' // 会重新赋值

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

其他文章