共计 1326 个字符,预计需要花费 4 分钟才能阅读完成。
重温 JavaScript(lesson2): 对于 ES6 中的 const
在 lesson1 中咱们重温了 ES6 中的 let。除了 let,ES6 还多了新成员 const。
const 同样能够创立块作用域变量,然而值是固定的,也就是常量,对其值批改就会报错。
对于 const 的应用有如下注意事项:
1. 申明的时候须要赋值
const constTest;
// 报错提醒:Unexpected token
2. 赋值之后不能再批改
const constTest = 30; constTest = 40; // 报错提醒:"constTest" is read-only
3. 申明的对象援用不能够扭转,然而能够批改对象的属性
const constObj = {};
constObj = {name:"New_Name"}
// 报错提醒:"constObj" is read-only
如上代码所示,应用 const 申明了 constObj 并初始化为空对象,再赋值为其余对象的时候就会报错。然而咱们能够批改为 constObj 所指向的对象减少或删除属性,这都不会报错。看代码:
const constObj = {};
constObj.name = 'New_Name';
constObj.age = 18;
delete constObj.name;
console.log(constObj)
//{age: 18}
在这里申明了 constObj 并为其初始化为一个空对象。接着,给 constObj 赋予 name 和 age 属性,而后删除 name 属性,这都是非法的操作。
当应用 const 申明数组的时候,状况相似,看代码:
const constArr = [];
constArr = [];
// 报错提醒:"constArr" is read-only
const constArr = [];
constArr.push(1);
constArr.unshift(2);
console.log(constArr)
//[2, 1]
4. 用 const 创立的变量只在块级作用域内无效
if(true) {
const maxItems = 5;
console.log(maxItems)//5
}
console.log(maxItems)//maxItems is not defined
代码所示,maxItesms 是在 if 语句中申明的,所以只在其内能够拜访到,而在内部无法访问。
5. 相干面试题
应用 ES5 实现 const 的性能
function _const(key, value) {
const desc = {
value,
writable: false
}
Object.defineProperty(window, key, desc)
}
_const('obj', {a: 1}) // 定义 obj
obj.b = 2 // 能够失常给 obj 的属性赋值
obj = {} // 报错
这里应用了 Object.defineProperty() 办法扭转对象属性特色,该办法承受 3 个参数:具备某属性对象、属性名和属性特色的形容对象。代码应用了自定义的_const 函数将 obj 对象申明为了 const。代码参考了:https://mp.weixin.qq.com/s/ay…
好了,这就是明天咱们回顾的全部内容了。如有谬误,请不吝指正。温故而知新,欢送和我一起重温旧常识,攀登新台阶~
正文完
发表至: javascript
2021-05-02