变量的解构赋值

2021-02-23 14:31:34 浏览数 (1)

变量的解构赋值

数组的解构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构

本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值

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

不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组

对于 Set 结构,也可以使用数组的解构赋值

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

解构赋值允许指定默认值

只有当一个数组成员严格等于undefined,默认值才会生效

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

对象的解构赋值

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

对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量

真正被赋值的是后者不是前者

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

对象的解构也可以指定默认值

默认值生效的条件是,对象的属性值严格等于undefined

如果解构失败,变量的值等于undefined

如果解构模式是嵌套的对象,而且子对象所在的父属性不存在,那么将会报错

由于数组本质是特殊的对象,因此可以对数组进行对象属性的解构

字符串的解构赋值

字符串被转换成了一个类似数组的对象

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

数值和布尔值的解构赋值

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

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

由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错

函数参数的解构赋值

undefined就会触发函数参数的默认值

圆括号问题

ES6 的规则是,只要有可能导致解构的歧义,就不得使用圆括号

建议只要有可能,就不要在模式中放置圆括号

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

用途

交换变量的值

从函数返回多个值

函数参数的定义

提取 JSON 数据

函数参数的默认值

遍历 Map 结构

输入模块的指定方法

0 人点赞