重温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}) //定义objobj.b = 2 //能够失常给obj的属性赋值obj = {} // 报错
这里应用了Object.defineProperty()办法扭转对象属性特色,该办法承受3个参数:具备某属性对象、属性名和属性特色的形容对象。代码应用了自定义的_const函数将obj对象申明为了const。代码参考了:https://mp.weixin.qq.com/s/ay...
好了,这就是明天咱们回顾的全部内容了。如有谬误,请不吝指正。温故而知新,欢送和我一起重温旧常识,攀登新台阶~