js变量的解构赋值

2020-04-13  本文已影响0人  鸡毛菜菜子

参考链接:https://es6.ruanyifeng.com/#docs/destructuring

一、符合Iterator接口类型的结构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。

如果解构不成功,变量的值就等于undefined.

如果等号的右边不是数组(或者严格地说,不是可遍历的结构,参见《Iterator》一章),那么将会报错。es6中有三类结构生来就具有Iterator接口:数组、类数组对象、Map和Set结构。事实上,只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值。【javascript】es6中的遍历器接口Iteratorhttps://www.cnblogs.com/toulon/p/6403075.html

不可遍历结构

解构赋值允许指定默认值。1.只有当一个数组成员严格等于undefined,默认值才会生效。

上面代码中,如果一个数组成员是null,默认值就不会生效,因为null不严格等于undefined。

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

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

上面最后一个表达式之所以会报错,是因为x用y做默认值时,y还没有声明。

二、对象的解构赋值

对象,各成员并没有一个确定的顺序,所以遍历时先遍历谁后遍历谁并不确定,所以对象并没有不知Iterator接口。所以对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

解构失败,变量值为undefined

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

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

foo是匹配模式,baz才是变量。

3.如果对一个已声明的变量进行解构,需要使用()将解构部分的代码包围起来,防止引擎会将{}块作为代码块运行。

三、字符串的解构赋值

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

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

四、数值和布尔型的解构赋值

解构赋值的规则是,只要等号右边不是对象或者数组就先将其转化为对象。

上面代码中,数值和布尔值的包装对象都有toString属性,因此变量s都能取到值。

五、函数参数的解构赋值

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

六、作用

1.交换变量值

2.从函数返回多个值

3.函数参数的定义

4.提取JSON数据

5.函数参数默认值

6.遍历Map结构

7.输入模块的指定方式

上一篇下一篇

猜你喜欢

热点阅读