1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-24 18:32:22 +00:00
es6tutorial/docs/destructuring.md
2014-04-30 12:34:47 +08:00

1.6 KiB
Raw Blame History

多变量的模式赋值

ES6允许按照一定模式一次性对多个变量进行赋值这又称为解构Destructuring

正常情况下,为多个变量赋值,只能一次次分开赋值。


var a = 1;
var b = 2;
var c = 3;

ES6允许写成下面这样。


var [a, b, c] = [1, 2, 3];

本质上,这种写法属于模式匹配,只要等号两边的模式相同,左边的变量就会被赋予对应的值。下面是一些嵌套数组进行模式赋值的例子。


var [foo, [[bar], baz]] = [1, [[2], 3]]

var [,,third] = ["foo", "bar", "baz"]

var [head, ...tail] = [1, 2, 3, 4]

模式赋值还允许指定默认值。


var [missing = true] = [];

console.log(missing)
// true

var { x = 3 } = {};
console.log(x)
// 3

模式赋值不仅可以用于数组,还可以用于对象。


var { foo, bar } = { foo: "lorem", bar: "ipsum" };

foo // "lorem"
bar // "ipsum"

var o = {
  p1: [
    "Hello",
    { p2: "World" }
  ]
};

var { a: [x, { y }] } = o;

x // "Hello"
y // "World"

这种写法的用途很多。

1交换变量的值


[x, y] = [y, x]; 

2从函数返回多个值


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

var [a, b, c] = example();

3函数参数的定义


function f({p1, p2, p3}) {
  // ...
}

4函数参数的默认值


jQuery.ajax = function (url, {
  async = true,
  beforeSend = function () {},
  cache = true,
  complete = function () {},
  crossDomain = false,
  global = true,
  // ... more config
}) {
  // ... do stuff
};