对于 const 问题回答时:我会回答 const 定义的是一个只读的常量 而且定义的数据 不能改变 一旦声明变量必须马上初始化 同时没有变量提升、会造成暂时性死区、只在声明的块级({})作用中有效
const ac = "1";
ac = 2; // 报错Assignment to constant variable.
if ('istrue') {
const chunkNum = 1;
}
console.log(chunkNum); // chunkNum is not defined `在这里插入代码片`
console.log(b); // Cannot access 'b1' before initialization
const b = "2b"
这些我觉得我把 const 的这个声明的方式 说完了 但是又抛出来一个问题 const 中的声明的对象 可以修改吗? 有点蒙蔽 我会说 不会 因为声明的基本类型 number string 都是不行的 (其实或许在自己 不留意的时候 可能就这么去写过让 const 声明对象的代码 记不起来了而已 ) 但是答案是否定 可以去修改对象中的值 为什么可以做呢
const 本质上 又是什么呢 (其实大家如果好好读了 阮老师的es6阮老师es6知识整理 的文章 就能理解了 其实我看了好几遍 都没有认认真真的去看这个知识点 )
// 以下文字借鉴于 阮老师的文章
const 实质上保证的不是变量值不得改动 而是变量指向的那个内存地址所保存的数据不得改动 对于简单数据类型 值就保存在变量指向的内存地址、 对于复合类型 也叫引用类型(多用于 对象和 数组)变量指向的内存地址、保存的只是一个实际数据的指针、const 保证只是这个指针是固定的。它指向的数据结构 是不是可变的 就不受控制了
const objc = {
}
// 添加一个属性 name;
objc.name = "李四"
console.log(objc.foo) // "111"
// 赋值为一个新的对象
objc = {}; // 报错 Assignment to constant variable.
上述代码中 变量objc 储存的是一个地址 (个人理解:也就是上面所说的指针) 这个地址是一个对象;
不可变的是这个地址,对象里面的数据 是可以变得.可以去添加属性 或者调用对象的方法 都是可以的;只要不改变对象本身 都是可以的。
说一个题外话(又不是很外…) objc = {} 报错的原因 不知道是不是 空对象 是不等于 空对象的 // {} === {} = false;如果对象本身相同的话 是不是可以理解为 对象本身并没有改变、、但是说过指针是固定的 所以还是不行。。
(希望可以对你学习 或者 面试有帮助)