Appearance
解构
- 只要等号右边的值不是对象或数组,就先将其转为对象。
- 由于 undefined 和 null 无法转为对象,所以对它们进行解构赋值,都会报错。
数组解构赋值
js
let [a,b,c] = [1,2,3]; // a=1, b=2, c=3
1
嵌套赋值
- "模式匹配”:只要等号两边的模式相同,左边的变量就会被赋予对应的值。变量的取值由它的位置决定解构不成功时变量的值为 undefined
js
let [a,[b,c]] = [1,[2,3]];// a=1, b=2, c=3
let [ , ,c] = [1,2,3];// c=3
let [c] = [1,2,3];// c = 1
let [a,c] = [1];// a = 1, c undefined
1
2
3
4
2
3
4
- 只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值
js
let [foo] = 1;
let [foo] = false;
let [foo] = NaN;
let [foo] = undefined;
let [foo] = null;
let [foo] = {};
1
2
3
4
5
6
2
3
4
5
6
只有当一个数组成员严格等于 undefined,默认值才会生效。
默认值(直接 = 赋子)
如果默认值是一个表达式,那么这个表达式是惰性求值的,即只有在用到的时候,才会求值。
默认值可以引用解构赋值的其他变量,但该变量必须已经声明
js
let [x = 1, y = x] = []; // x=1; y=1
let [x = 1, y = x] = [2]; // x=2; y=2
let [x = 1, y = x] = [1, 2]; // x=1; y=2
let [x = y, y = 1] = []; // ReferenceError
1
2
3
4
2
3
4
省略赋值
js
let [, , x] = [1, 2, 3];
console.log(x);
1
2
2
解构对象
对象也可以被解构
js
var obj = {name:'wjw',age:8};
//对象里的name属性的值会交给name这个变量,age的值会交给age这个变量
var {name,age} = obj;
//对象里的name属性的值会交给myname这个变量,age的值会交给myage这个变量
let {name: myname, age: myage} = obj;
console.log(name,age,myname,myage);
1
2
3
4
5
6
2
3
4
5
6
默认值
在赋值和传参的时候可以使用默认值
js
let [a = "a", b = "b", c =new Error('C必须指定')] = [1, , 3];
console.log(a, b, c);
function ajax (options) {
var method = options.method || "get";
var data = options.data || {};
//.....
}
function ajax ({method = "get", data}) {
console.log(arguments);
}
ajax({
method: "post",
data: {"name": "zfpx"}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15