重温JavaScript(lesson2):关于ES6中的const

Posted 重温新知

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重温JavaScript(lesson2):关于ES6中的const相关的知识,希望对你有一定的参考价值。

重温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(lesson2):关于ES6中的const的主要内容,如果未能解决你的问题,请参考以下文章

重温JavaScript(lesson3):作用域和闭包

JavaScript笔记(第一章,第二章)

重温JavaScript(lesson6):函数

重温Javascript

重温Javascript

重温JavaScript