解构赋值
允许使用类似数组或对象字面量的方式进行赋值给变量
举个简单的例子:
// 传统方式
var DDFE = ['wanliu_fe', 'tech_taxi_fe'];
var first = DDFE[0];
var second = DDFE[1];
等价于:
var DDFE = ['wanliu_fe', 'tech_taxi_fe'];
var [first, second] = DDFE;
所以,顺理,我们可以按照上面这样定义多个变量:
其实就是按照左右的模式匹配
var [first, second, third] = ['wanliu_fe', '', 'tech_taxi_fe'];
等价于:
var first = 'wanliu_fe';
var second = '';
var third = 'tech_taxi_fe';
如果解构不成功:
var [first, second] = ['wanliu_fe'];
相当于:
var _ref = ['wanliu_fe'];
var first = _ref[0]; // 'wanliu_fe'
var second = _ref[1]; // undefined
注意:
当右边是下列值的时候,会解构失败,babel 也会报如下的错误:
Invalid attempt to destructure non-iterable instance
// 右边大部分是非集合
var [first,second] = false;
var [first,second] = {};
var [first,second] = null;
如何设置默认值?
var [first,second = 'tech_taxi_fe'] = ['wanliu_fe'];
相当于:
var _ref = ['wanliu_fe'];
var first = _ref[0];
var _ref$ = _ref[1];
var second = _ref$ === undefined ? 'tech_taxi_fe' : _ref$;
前面介绍的都是数组类型的,下面我们看看对象:
举例:
var {name, from} = {name: 'DDFE', from: 'DiDi'};
相当于:
var _name$from = { name: 'DDFE', from: 'DiDi' };
var name = _name$from.name;
var from = _name$from.from;
左边的变量名必须和右侧的一致:
var {name, form} = {name: 'DDFE', from: 'DiDi'};
相当于:
var _name$from = { name: 'DDFE', from: 'DiDi' };
var name = _name$from.name;
var form = _name$from.form;