ES6笔记(解构赋值)
解构赋值
变量的解构:
- 解构赋值允许指定默认值。
- 解构赋值必须保证赋值方 被赋值方类型一直 但Item允许有遗漏或者多出。
- 默认值可以引用解构赋值的其他变量,但该变量必须已经声明
let [x = 1, y = x] = []; // x=1; y=1
let [x = y, y = 1] = []; // ReferenceError
对象的 解构赋值:
-
对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;
-
而对象的属性没有次序,变量必须与属性同名,才能取到正确的值
(数据库、序列化) -
对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者;前者是key,后者才是变量!
注意,采用这种写法时,变量的声明和赋值是一体的。对于let和const来说,变量不能重新声明,所以一旦赋值的变量以前声明过,就会报错。
字符串的解构赋值
字符串也可以解构赋值。
这是因为此时,字符串被转换成了一个类似数组的对象
类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值。
let {length : len} = 'hello';
len // 5
let {toString: s} = 123;
s === Number.prototype.toString // true
let {toString: s} = true;
s === Boolean.prototype.toString // true
let { prop: x } = undefined; // TypeError
let { prop: y } = null; // TypeError
解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。
undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。
- 不能使用圆括号的情况
- 变量声明语句中,不能带有圆括号
- 函数参数中,模式不能带有圆括号。
- 赋值语句中,不能将整个模式,或嵌套模式中的一层,放在圆括号之中
- 可以使用圆括号的情况只有一种:赋值语句的非模式部分,可以使用圆括号。
网友评论