说明
在 JS 中,有一个表达式是解构,它允许从对象或数组中提取值,并将值赋给变量。在开发中使用,能让我们的代码变得更加简洁。
比如:
1 | var person = ['John', 30, 'New York'] |
对象解构
以下的赋值语法默认使用了 ES6,部分老旧的浏览器是不支持这样赋值的。
对对象而言,解构赋值相当于为多个属性创建不同的变量名,例如:
1 | const person = { |
这里我们从 person 对象中解构出 name 和 age 属性,分别赋值给同名变量。这是一个非常实用的语法,可以让我们快速从对象中获取所需的属性。
非 ES6 语法进行赋值
1 | // 对象 |
解构的变量名不需要与属性同名,我们可以在解构语句中自定义变量名:
1 | const { name: firstName, age } = person; |
这里我们将 name 属性解构到 firstName 变量。解构赋值语句可以有默认值,这样即使属性不存在,变量也会有值:
1 | const { name, age = 20 } = person; |
height 属性不存在,所以 height 变量取默认值 180。
解构嵌套对象:
1 | const user = { |
数组解构
我们上面举的例子都是对象解构,下面说明数组解构,也是类似的:
基本语法是:
1 | let [x, y] = [1, 2]; |
交换变量的值:
1 | let a = 1; |
这里我们从数组中解构出 x 和 y 两个值。如果解构不成功,值就等于 undefined:
1 | let [x, y] = [1]; |
解构可以嵌套,从多维数组中解构:
1 | let [x, [y], z] = [1, [2], 3]; |
解构也可以有默认值:
1 | let [x, y = 2] = [1]; |
数组解构赋值经常用于从函数返回多个值,并直接赋给不同的变量。例如:
1 | function getUser() { |
我们从 getUser() 的返回值中直接解构出 name 和 age 变量。