es6学习笔记(三)变量的解构赋值

1、数组的解构赋值

 只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值,和python的解构有相似的地方,但es6要求左右的符号要完全一致。

解构赋值允许指定默认值。

ES6 内部使用严格相等运算符(===),判断一个位置是否有值。所以,只有当一个数组成员严格等于undefined,默认值才会生效

如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到的时候,才会求值。

默认值可以引用解构赋值的其他变量,但该变量必须已经声明。

解构的时候为什么用默认值呢?

是怕解构的数组没有值的情况下,给它付一个默认值。

2、对象的解构赋值

解构不仅可以用于数组,还可以用于对象。

let { foo, bar } = { foo: "aaa", bar: "bbb" };

  对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

对象解构赋值类似于python中的dict

如果变量名与属性名不一致,必须写成下面这样:

let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
baz // "aaa"

  与数组一样,解构也可以用于嵌套结构的对象。

对象的解构赋值,可以很方便地将现有对象的方法,赋值到某个变量。

3、字符冲的解构赋值

字符串也可以解构赋值。这是因为此时,字符串被转换成了一个类似数组的对象。

类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值。

4、数字和bool值的解构赋值

构赋值时,如果等号右边是数值和布尔值,则会先转为对象

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

5、函数参数的解构赋值

函数的参数也可以使用解构赋值。

函数参数的解构也可以使用默认值。

6、圆括号的问题

解构赋值虽然很方便,但是解析起来并不容易。对于编译器来说,一个式子到底是模式,还是表达式,没有办法从一开始就知道,必须解析到(或解析不到)等号才能知道。

由此带来的问题是,如果模式中出现圆括号怎么处理。ES6 的规则是,只要有可能导致解构的歧义,就不得使用圆括号。

但是,这条规则实际上不那么容易辨别,处理起来相当麻烦。因此,建议只要有可能,就不要在模式中放置圆括号。

 

可以使用圆括号的情况只有一种:赋值语句的非模式部分,可以使用圆括号。

7、解构的用途

交换变量的值

从函数返回多个值

函数参数的定义

提取 JSON 数据

函数参数的默认值

遍历 Map 结构

输入模块的指定方法

posted @ 2018-07-18 22:51  tutu_python  阅读(197)  评论(0)    收藏  举报