码迷,mamicode.com
首页 > 编程语言 > 详细

ES6浅谈--const,数组解构

时间:2019-12-25 17:35:58      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:length   全局对象   win   添加   全局   环境   foo   free   必须   

关于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,数组解构

标签:length   全局对象   win   添加   全局   环境   foo   free   必须   

原文地址:https://www.cnblogs.com/harrywu96/p/12097920.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!