ES6随笔D1

1.数值解构赋值

ES6 允许按照一定模式,可以从数组中提取值,按照对应位置,对变量赋值,这被称为解构。

解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefinednull无法转为对象,所以对它们进行解构赋值,都会报错。

  数组

 

1 let [a,b,c] = [1,2,3];
2 a    //1
3 b    //2
4 c    //3
5 
6 let [,,better]=[1,2,3];
7 better    //3

如果解构不成功,值为  underfind

1 let [ a , b ,  ...c] = ['a'];
2 a    //a
3 b    //underfind
4 c    //[]
View Code

事实上,只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值

解构是允许默认值的,默认值可以引用解构赋值的其他变量,但该变量必须已经声明。只有当赋值=== underfind时,默认值才生效。

let [a = '123' , b = '456' ] = ['c ' , 'underfind'];
a    //c
b    //'underfnd'

  对象

 对象的解构属性没有次序,变量必须与属性同名,才能取到正确的值。

对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。

 

1  let {foo :baz } = {foo:'fiist',bar:'second'}; 
2 baz        // first
3 foo        //  error: foo is not defined

上面代码中,foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo

  注意

  

1 // 错误的写法
2 let x;
3 {x} = {x: 1};
4 // SyntaxError: syntax error

上面代码的写法会报错,因为 JavaScript 引擎会将{x}理解成一个代码块,从而发生语法错误。只有不将大括号写在行首,避免 JavaScript 将其解释为代码块,才能解决这个问题。

1 // 正确的写法
2 let x;
3 ({x} = {x: 1});

 

posted @ 2021-01-19 10:19  公吧菜腿  阅读(28)  评论(0编辑  收藏  举报