Es6系列之destructuring assignments

简介:

Ecmascript 6简称es6,是javascript下一代标准,还处在开发阶段,估计2014年底发布,有关更多浏览器对es6的支持情况,点击这里

今天说说es6里对赋值语句的改进,简称解构赋值.


解构赋值

所谓解构赋值其实就是按照模式匹配进行批量赋值

下面的是以往的赋值语句

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

以往的方式对于赋值多个变量的时候代码比较多而且不方便,那么es6里对它是怎么改进的呢?

通过以对象或者数组结构组装数据进行赋值,要保证赋值左右值类型相同,先来说说数组赋值.

数组赋值

先上一段简单的代码

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

上面就是给变量a, b, c分别赋值1,2,3,是不是感觉代码立马简便不少呢.这只是赋值语句最简单的用法,下面一一列出别的赋值特点

  • 左值支持默认值
var [a = 1] = []; // => 1
  • 左值支持...语法来装载剩余的右值,只能放在最后
var [a, b, ...c] = [1, 2, 3, 4, 5, 6]; // => 1 2 [3, 4, 5, 6]
  • 左值支持嵌套多层,支持嵌套数组与对象,这里提前说下对象赋值要保证键值相同
var [a, [b], [[c]] ] = [1, [2], [[3]]]; // => 1 2 3

var [a, [ {b} ], [c] ] = [1, [ {b: 2} ], [3] ]; // => 1 2 3

下面说说利用对象作为左右赋值类型来进行快速赋值

对象赋值

先上一段简单的代码

var { a, b } = { a: 'hello' , b: 'feenan'}; // => hello feenan

对象类型跟数组类型的区别在于对象是以键值来匹配的,而数组是以位置来匹配的,所以对象赋值对顺序没要求,但是数组需要以左值顺序来赋值的

下面列出一些关于对象赋值的一些特点,有些跟数组赋值相似

  • 左值支持默认值
var { a = 1 } = {}; // =>1
  • 左值支持嵌套多层,支持嵌套数组与对象
var { a: [b, {c}] } = {
    a: ['hello', { c: 'feenan'} ]
};

// => undefined hello feenan

上面的赋值只会给b,c赋值,a没有赋值,经测试发现只要左侧内的变量包含子变量的话,则本身是不会赋值的

说完了数组与对象类型的赋值语句,下面再说说其它用途

赋值语句用途

变量互换

var [x, y] = [1, 4];

[x, y] = [y, x]; // x => 4 , y => 1

函数默认参数

function abc({
    x = 1,
    y = 2
}){
    console.log(x, y);
}
abc({x:7}); // => 7 2
abc({y:7}); // => 1 7
abc({}); // => 1 2

导出指定模块的功能

var {open, close} = require('fs');

利用for...of语法获取map键值对

var map = new Map();
map.set('action', 'hello');
map.set('info', 'feenan');

for(let [key, value] of map){
    console.log(key, value); // => action hello & info feenan
}

运行

关于上面的例子可以通过安装traceur模块来进行测试

npm install -g traceur

运行例子如下

traceur demo.js

总结

个人比较喜欢此次es6的赋值语法糖,希望各大浏览器厂商赶紧提供支持吧 :)


目录
相关文章
|
7月前
es_详解
es_详解
24 0
|
8月前
ES6(二)
es6相关知识
33 0
|
8月前
|
网络架构 索引
ES6(一)
- 使用let,声明的变量仅在块级作用域内有效 - var命令声明的,在全局范围内都有效 - const声明一个只读的常量。一旦声明,常量的值就不能改变。 - const的作用域与let命令相同:只在声明所在的块级作用域内有效。 - let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。 - let不允许在相同作用域内,重复声明同一个变量。 - 什么时候用 let,什么使用用 const——如果不知道用什么的时候,就用 const
33 0
|
9月前
ES6 Day02
ES6 Day02
37 0
|
9月前
|
前端开发 JavaScript API
ES6-day03
ES6-day03
40 0
|
9月前
|
前端开发 容器
ES6 Day04
ES6 Day04
56 0
|
JSON JavaScript 前端开发
ES5和ES6的介绍
《前端基础》
316 0
|
前端开发 JavaScript 网络架构
除了ES6,ES还有那些必须要懂得知识?
Includes 方法用来检测数组中是否包含某个元素,返回布尔类型值。
91 0
除了ES6,ES还有那些必须要懂得知识?
|
前端开发 JavaScript 网络架构
一篇文章带你学会整个ES6
ES 全称 EcmaScript,是脚本语言的 规范 ,而平时经常编写的 JavaScript ,是 EcmsScript 的 一种实现 ,所以 ES 新特性其实是指 JavaScript 的新特性 。
71 0
|
JavaScript
浅谈一下ES6的提升
es6的提升 在es6之前,我们定义定义变量的时候,只能使用var关键字来定变量,这样有一个问题,var定义的变量会成为全局变量。

热门文章

最新文章