• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
向阳光大道勇猛前进吧,了解但不走偏门!
            管理     

解构赋值

解构赋值方便了从数组和对象中提取值。简洁直观!

解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。

 

数组匹配

ES6

var list = [ 1, 2, 3 ];
var [ a, , b ] = list;             //output: a=>1;b=>3
[ b, a ] = [ a, b ];               //output: a=>3;b=>1


ES5

var list = [ 1, 2, 3 ];
var a = list[0], b = list[2];
var tmp = a; a = b; b = tmp;

  

 

 

 

对象匹配(在分配过程中, 将对象直观和灵活地 解构 到单个变量中。)

ES6

var { op, lhs, rhs } = getASTNode()

ES5

var tmp = getASTNode();
var op  = tmp.op;
var lhs = tmp.lhs;
var rhs = tmp.rhs;




再来复杂一点点哦↓

ES6 var { op: a, lhs: { op: b }, rhs: c } = getASTNode(); ES5 var tmp = getASTNode(); var a = tmp.op; var b = tmp.lhs.op; var c = tmp.rhs;

  

 

对象和数组匹配, 默认值

ES6

var obj = { a: 1 };
var list = [ 1 ];
var { a, b = 2 } = obj  ;          //a=>1
var [ x, y = 2 ] = list  ;         //b=>2

ES5


var obj = { a: 1 };
var list = [ 1 ];
var a = obj.a;
var b = obj.b === undefined ? 2 : obj.b;
var x = list[0];
var y = list[1] === undefined ? 2 : list[1];

  

参数上下文匹配(在函数调用过程中, 将数组和对象的直观和灵活的 解构 到单个参数中。)

ES6

function f ([ name, val ]) {
    console.log(name, val)
}
function g ({ name: n, val: v }) {
    console.log(n, v)
}
function h ({ name, val }) {
    console.log(name, val)                        //简洁彪悍!
}
f([ "bar", 42 ])
g({ name: "foo", val:  7 })
h({ name: "bar", val: 42 })


ES5

function f (arg) {
    var name = arg[0];
    var val  = arg[1];
    console.log(name, val);
};
function g (arg) {
    var n = arg.name;
    var v = arg.val;
    console.log(n, v);
};
function h (arg) {
    var name = arg.name;
    var val  = arg.val;
    console.log(name, val);
};
f([ "bar", 42 ]);
g({ name: "foo", val:  7 });
h({ name: "bar", val: 42 });

  

故障

(null,underfined基本数据类型无法引用对象,故出错噢)

 

ES6

var list = [ 7, 42 ]
var [ a = 1, b = 2, c = 3, d ] = list
a === 7
b === 42
c === 3
d === undefined

ES5

var list = [ 7, 42 ];
var a = typeof list[0] !== "undefined" ? list[0] : 1;
var b = typeof list[1] !== "undefined" ? list[1] : 2;
var c = typeof list[2] !== "undefined" ? list[2] : 3;
var d = typeof list[3] !== "undefined" ? list[3] : undefined;
a === 7;
b === 42;
c === 3;
d === undefined;

  

 

友情链接:http://es6-features.org/#FailSoftDestructuring

 

圣凡无二路,方便有多门。
posted @ 2018-06-17 00:20  优昙陀罗  阅读(174)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3