解构赋值
数组的解构赋值
let [foo, [[bar], baz]] = [1, [[2], 3]];
foo
bar
baz
let [ , , third] = ["foo", "bar", "baz"];
third
let [x, , y] = [1, 2, 3];
x
y
let [head, ...tail] = [1, 2, 3, 4];
head
tail
let [x, y, ...z] = ['a'];
x
y
z
- 解构赋值不仅适用于var命令,也适用于let和const命令。
允许指定默认值
var [x = 1] = [undefined];
x
var [x = 1] = [null];
x
- ES6内部使用严格相等运算符(===),判断一个位置是否有值。所以,如果一个数组成员不严格等于undefined,默认值是不会生效的
对象的解构赋值
- 对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
var { bar, foo } = { foo: "aaa", bar: "bbb" };
foo
bar
var { baz } = { foo: "aaa", bar: "bbb" };
baz
字符串的解构赋值
const [a, b, c, d, e] = 'hello';
a
b
c
d
e
数值和布尔值的解构赋值
let {toString: s} = 123;
s === Number.prototype.toString
let {toString: s} = true;
s === Boolean.prototype.toString
函数参数的解构赋值
function add([x, y]){
return x + y;
}
add([1, 2]);
用途
- 交换变量的值
[x, y] = [y, x];
- 从函数返回多个值
function example() {
return [1, 2, 3];
}
var [a, b, c] = example();
- 函数参数的定义
function f([x, y, z]) { ... }
f([1, 2, 3]);
- 提取JSON数据
var jsonData = {
id: 42,
status: "OK",
data: [867, 5309]
};
let { id, status, data: number } = jsonData;
- 函数参数的默认值
jQuery.ajax = function (url, {
async = true,
beforeSend = function () {},
cache = true,
complete = function () {},
crossDomain = false,
global = true,
}) {
};