解构赋值


解构赋值,ES6 新增语法,以下是解构赋值的一些示例代码:

1
2
3
let [x,y] = [1,2]
[x,y] = [x+1,y+1]
[x,y] = [y,x]

解构赋值让使用返回数组的函数变得异常便捷:

1
2
3
4
5
6
7
8
9
10
function toPolar(x, y){
return [Math.sqrt(x*x+y*y), Math.atan2(y,x)]
}

function toCartesian(r, theta){
return [r*Math,cos(theta), r*Math.sin(theta)]
}

let [r,theta] = toPolar(1.0, 1.0)
let [x,y] = toCartesian(r,theta)

遍历一个对象所有属性的名/值对:

1
2
3
4
let o = {x:1, y:2}
for(const [name,value] of Object.entries(o)){
console.log(name,value)
}

解构赋值左侧变量的个数不一定与右侧数组中元素的个数相同。左侧多余的变量会被设置为 undefined, 而右侧多余的值会被忽略。左侧的变量列表可以包含额外的逗号,以跳过右侧的某些值:

1
2
3
let [x,y] = [1]
[x,y] = [1,2,3]
[,x,,y] = [1,2,3,4]

在解构赋值时,如果你想把所有未使用的或剩余的值收集到一个变量中,可以在左侧最后一个变量名前面加上3个点(…):

1
let [x, ...y] = [1,2,3,4]