ES6浅谈--const,数组解构

Posted harrywu96

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6浅谈--const,数组解构相关的知识,希望对你有一定的参考价值。

关于const:

1.const声明的基本类型的值不可重复声明,不可修改,声明之后需要初始化,声明存在暂时性死区,只在声明的块级作用域内有效。

2.const本质上确保的是变量的内存地址的数值不会被改动,所以对于基本类型的值来说,数值在栈中保存,不会被修改;但是对于对象来说,const声明的对象不可以被改变的是内存地址,数据存在堆中,是可以被修改的,如果想不被修改需要freeze。

3.冻结对象后不能新添加属性,但是还可以修改原有属性,所以需要彻底冻结所有属性。

4.浏览器环境下顶层对象和全局对象都是指window对象,使用let,const等es6声明的全局变量或对象不再是属于顶层对象中的属性。

关于数组解构:

1.解构length左边>右边,多余的值为undefined,右边>左边,无影响。

2.解构可以使用默认值,省略值,解构右边必须可以遍历。默认值只有当右边严格等于undefined才生效,如var [a=1,b=2] = [3],此时b=2,因为省略情况也是相当于初始为undefined。null不严格等于(===)undefined,但是==,所以右边有null还是会等于null。

3.默认值为函数时是惰性求值,只有当需要求的时候才调用函数,如果右边有值就不调用。设置默认值可以是之前声明的变量,但是不可以是未被声明的变量,如x=y,y=1,这时x需要y的值,但是y还未被声明。

关于对象解构:

1.对象解构同名直接用,因为es6同名可以省略名值对成单独的名,不同名仍需要写全。注意模式和变量的区别,变量才有意义,模式只是去找到变量的途径,不会被赋值。

2.对象解构可以取得继承的值,如obj1是obj2的原型,那么let {obj1的属性} = obj2(obj2甚至可以是空对象),最后都能获取以obj1的属性为标识符的值。

let {foo:{bar:rr}} = {bar:‘baz‘}
    console.log(rr)

3.如上代码,如果未声明foo这个父对象,然后直接去取其子对象bar,那么就会报错,但是如果声明了就没有问题(后面替换为{foo:{bar:‘baz‘}})

今天就到这里

以上是关于ES6浅谈--const,数组解构的主要内容,如果未能解决你的问题,请参考以下文章

三阶段课程——Day02(ES6简介let和const)(数据类型和数据结构:字符串扩展Symbol数组新增方法对象新增SetMap数组解构对象解构...运算符)

ES6:对象增强写法&解构&let/const

ES6:对象增强写法&解构&let/const

es6

ES6新特性:解构表达式

ES6解构赋值