const
const
const声明一个只读常量,一旦声明值不可以改动;并且一旦声明就必须立即初始化
const与let一样只在声明的块级作用域中有效const存在暂时性死区,只能在声明后使用const与let声明的变量一样不可以重复声明注意
const实际保证的并不是值不变,而是其指向的内存地址不变,至于其内部数据结构是否改变就不能控制const foo = {}; // 为 foo 添加一个属性,可以成功 foo.prop = 123; foo.prop // 123 // 将 foo 指向另一个对象,就会报错 foo = {}; // TypeError: "foo" is read-only提示:常量储存的是一个地址,地址指向一个对象,只是这个地址是不可变的,但是这个对象本身是可以改变的
const a = []; a.push('Hello'); // 可执行 a.length = 0; // 可执行 a = ['Dave']; // 报错提示:常量a是一个数组,这个数组本身是可写的,但是如果将另外一个数组复制给a的话就会报错
如果想冻结
const声明的常量可以用freeze方法const foo = Object.freeze({}); // 常规模式时,下面一行不起作用; // 严格模式时,该行会报错 foo.prop = 123;冻结对象本身之外,冻结对象属性
var constantize = (obj) => { Object.freeze(obj); Object.keys(obj).forEach( (key, i) => { if ( typeof obj[key] === 'object' ) { constantize( obj[key] ); } }); };