定义 :ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构

1.从数组中结构:

 1.1 es6语法

  

//数组结构 
let [a,b,c]=[1,2,3];
//带默认值的数组结构
let [a1,b1="yueban"]=['月半琳']

let [a2,b2="yueban"]=['月半琳']

 

 

 

 1.1  转义后的es5语法  

"use strict";

//数组结构 
var a = 1,
    b = 2,
    c = 3;
//带默认值的数组结构

var _ref = ['月半琳'],
    a1 = _ref[0],
    _ref$ = _ref[1],
    b1 = _ref$ === undefined ? "yueban" : _ref$;
var _ref2 = ['月半琳'],
    a2 = _ref2[0],
    _ref2$ = _ref2[1],
    b2 = _ref2$ === undefined ? "yueban" : _ref2$;

 

可以看出:带默认值得时候解构,会找一个中点变量 _ref 临时保存右边的数组 然后去复制


//默认值可以引用解构赋值的其他变量,但该变量必须已经声明。
let [a3 = 1,b3 = a3]=['月半琳']
 
2.从对象中结构
  对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

// 对象结构
let { bar, foo } = { foo: "aaa", bar: "bbb" };
foo // "aaa"
bar // "bbb"

let { baz } = { foo: "aaa", bar: "bbb" };
baz // undefined

  2.2 es5 

// 对象结构

var _foo$bar = { foo: "aaa", bar: "bbb" },
    bar = _foo$bar.bar,
    foo = _foo$bar.foo;

foo; // "aaa"
bar; // "bbb"

var _foo$bar2 = { foo: "aaa", bar: "bbb" },
    baz = _foo$bar2.baz;

baz; // undefined

  2.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'

 

  也就是说,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。

  3.3与数组一样,解构也可以用于嵌套结构的对象。

  

  

 

 

 

posted on 2018-06-08 12:04  月半星  阅读(92)  评论(0编辑  收藏  举报