跳到主要内容

JavaScript 解构赋值

JavaScript 提供了一种「解构赋值」的语法,用于将属性/值从对象/数组中取出,赋值给其他变量。这是 ES6 新增的特性,目的是为对象和数组提供一种简单的定义一个特定的数据组的方法。

下面通过几个示例来讲解如何使用 JavaScript 解构赋值的特性。

解构示例

示例 1

假设有一个数组 arr,如果我们想获取数组的前两项数据,可以直接在表达式左边使用方括号提取。如下:

var arr = [1, 2, 3, 4, 5];
var [a, b] = arr;
console.log(a); // 1
console.log(b); // 2

当然,我们也可以提取一项,或者更多项。例如:

var [a] = arr;   // a = 1
var [a, b, c, d, e] = arr;

示例 2

上述例子扩展一下,现在我们想提取数组的剩余项,该怎么办?

var arr = [1, 2, 3, 4, 5];
var a, b, rest;

[a, b, ...rest] = arr;
console.log(a); // 1
console.log(b); // 2
console.log(rest); // [3, 4, 5]

当然,也可以直接提取剩余项,例如:

[...rest] = arr;
console.log(rest); // [1, 2, 3, 4, 5]

示例 3

如果是对象,也可以进行解构赋值。例如:

var obj = { a: 10, b: 20 };
var a, b;

({ a, b } = obj);
console.log(a); // 10
console.log(b); // 20

同样,可以提取剩余项,例如:

var obj = {a: 10, b: 20, c: 30, d: 40};
var a, b, rest;

({a, b, ...rest} = obj);
console.log(a); // 10
console.log(b); // 20
console.log(rest); // {c: 30, d: 40}

注意:赋值语句周围的圆括号 ( ... ) 在使用对象字面量无声明解构赋值时是必须的。

示例 4

为了防止从数组或对象中取出一个值为 undefined 的数据,可以在表达式左边的数组中为任意对象预设默认值。例如:

var a, b;

[a=5, b=7] = [1];
console.log(a); // 1
console.log(b); // 7

示例 5

我们可以利用解构赋值,在一个解构表达式中可以交换两个变量的值。这样就不需要设置一个临时变量,使代码更简洁。例如:

var a = 1;
var b = 3;

[a, b] = [b, a];
console.log(a); // 3
console.log(b); // 1

示例 6

从一个函数返回一个数组是十分常见的情况,解构使得处理返回值为数组时更加方便。例如下面例子中,函数 f() 返回 [1, 2],调用者可以使用解构在一行内完成解析。

function f() {
return [1, 2];
}

var a, b;
[a, b] = f();
console.log(a); // 1
console.log(b); // 2

这种方式与 Python 很相似!