ES6 对象和数组解构小记

数组结构是按照数组索引来结构赋值的。 对象是按照属性名来结构赋值的。node

1.数组:

let [x, y = 'b'] = ['a'];  // 1.能够有默认值
x // a
y // b
let [a, [b], d] = [1, [2, 3], 4];  // 2.不彻底解构
a // 1
b // 2
d // 4

let [foo] = 1; // 报错,某种数据结构具备 Iterator 接口,均可以采用数组形式的解构赋值。1不具有Iterator接口。

2.对象:
let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
baz // "aaa"

let obj = { first: 'hello', last: 'world' };
let { first: f, last: l } = obj;
f // 'hello'
l // 'world'
first // error: first is not defined
对象的解构赋值的内部机制,是先找到同名属性,而后再赋给对应的变量。真正被赋值的是后者,而不是前者。

let obj = {
  p: [
    'Hello',
    { y: 'World' }
  ]
};
let { p: [x, { y }] } = obj;  //此处{y} 实际上是{y : y}
x // "Hello"
y // "World"
// 此时p是模式,不是变量,所以不会被赋值。

// 结构 p 
let obj = {
  p: [
    'Hello',
    { y: 'World' }
  ]
};
let { p, p: [x, { y }] } = obj;
x // "Hello"
y // "World"
p // ["Hello", {y: "World"}]

// 嵌套类型的解构赋值
const node = {
  loc: {
    start: {
      line: 1,
      column: 5
    }
  }
};
let { loc, loc: { start }, loc: { start: { line }} } = node;
line // 1
loc  // Object {start: Object}
start // Object {line: 1, column: 5}

复制代码
相关文章
相关标签/搜索