ES6 - Note2:解构赋值
ES6的解构赋值就是利用模式匹配从按照一定模式的数组或者对象中提取值赋值给变量。
1.数组的解构赋值
在ES6以前,变量的赋值是直接指定的,以后可以这么来写,如下所示
let [a,b,c] = [1,2,3];
console.log(a,b,c)
1 2 3
解构赋值只要等号两边的模式一致,便可解析成功,如下所示
var [d,[f,g]] = [3,[4,5]];
console.log(d,f,g);
3 4 5
-----------------------------
var [,,e] = [0,0,1];
console.log(e);
1
-----------------------------
var [f,...g] = [2,4,5,6,7];
console.log(g);
Array [ 4, 5, 6, 7 ]
如果解构不成功,则变量的值等于undefined,如下所示
var [x,y] = [1];
console.log(x,y);
1 undefined
不完全解构,即是等号左边部分匹配等号右边,如下所示
var [x,y] = [1,2,4];
console.log(x,y);
1 2
------------------------
var [[m],n] = [[1,2],3];
console.log(m,n);
1 3
如果右边是不可遍历的数据解构,解构将会报错,如下所示
var [x,y] = 1;
TypeError: 1 is not iterable
带默认值的解构赋值,如下所示
var [x='hello',y="world"] = [];
console.log(x+' '+y);
hello world
//在ES6内部实现中,使用的是全等===来判断变量是否有值,因此变量的值不是严格的undefined,将不会采用默认值
var [w="hello",y="world"] = [,null];
console.log(w+' '+y);
hello null
2.对象的解构赋值
对象的解构是按照属性名来的,不分先后顺序,如下所示
var {y:j,x:i} = {x:1,y:2}
console.log(i,j);
1 2
如果解构的时候等号左边出现等号右边没有的属性,则变量的值为undefined。如下所示
var {y} = {z:'hello'};
console.log(y);
undefined
对象的解构也可以使用默认值,规则和数组解构一致
在使用已声明的变量进行对象解构赋值时,需要小心,因为大括号很有可能被解析器解析为代码块,如下所示
var x;
{x} = {x:1};
SyntaxError: expected expression, got '='
//这里需要用小括号括起来
({x} = {x:1});
3.字符串的解构赋值
字符串在进行解构赋值时会被转换层类数组,然后进行解析,如下所示
const [a,b,c] = "hello";
console.log(a,b,c);
h e l
var {length:len} = "test";
console.log(len);
4
4.函数参数的解构赋值
函数参数也可以使用解构赋值,如下所示
function test([x,y]){ return x+y; }
test([1,3]);
4
function test1({x=0,y=0}){ return x*y; }
test1({});
0
test1({x:4,y:5});
20
在解构赋值中,最好不要使用小括号。
解构赋值的用处也挺多的,比如在提取json数据,交换数据等地方
ES6 - Note2:解构赋值的更多相关文章
- ES6 的解构赋值前每次都创建一个对象吗?会加重 GC 的负担吗?
本文来源于知乎上的一个提问. 为了程序的易读性,我们会使用 ES6 的解构赋值: function f({a,b}){} f({a:1,b:2}); 这个例子的函数调用中,会真的产生一个对象吗?如果会 ...
- ES6之解构赋值
截止到ES6,共有6种声明变量的方法,分别是var .function以及新增的let.const.import和class: 我们通常的赋值方法是: var foo='foo'; function ...
- 进军es6(2)---解构赋值
本该两周之前就该总结的,但最近一直在忙校招实习的事,耽误了很久.目前依然在等待阿里HR面后的结果中...但愿好事多磨!在阿里的某轮面试中面试官问到了es6的掌握情况,说明es6真的是大势所趋,我们更需 ...
- es6的解构赋值学习(1)
相对es5的简单的"="赋值来说,es6增加了一种新的赋值模式--解构赋值,按照它的规则,可以从数组和对象中提取值来对变量进行赋值,个人觉得方便了很多,但是这个模式有点恶心人,相比 ...
- Es6 新增解构赋值
1.数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 要想实现解构,就必须是容器,或者具有可遍历的接口. 以前,为 ...
- ES6 之 解构赋值
本博文配合 阮一峰 <ES6 标准入门(第3版)>一书进行简要概述 ES6 中变量的解构赋值. 数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这 ...
- ES6变量解构赋值
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构ES6之前我们申明多个变量需要按照下面的方法: let l a=1; let b=2; let c=3; let d=4; ...
- es6变量解构赋值的用途
这里是我觉得es6解构赋值,在平时我们写js的时候非常有用,而且经常用到的地方,能简化我们的代码,让写代码简介优雅易读; 用途 1.交换变量的值,太方便了这逼,写法不仅简介而且一看就明白 let [x ...
- 粗看ES6之解构赋值
标签: javascript es6 什么是解构赋值? 示例如下: <!DOCTYPE html> <html> <head> <meta charset=& ...
- ES6变量解构赋值的用法
一.数组赋值(从数组中提取值,按照对应位置,对变量赋值) 1. 完全解构(变量与值数目相等) let arr = [1, 2, 3]; let [a,b,c] = arr; console.log(a ...
随机推荐
- lua的C库
在云风的ejoy2d里是没有dll和so之类的东西的, 所有的C扩展都是类似这样写的: int ejoy2d_shader(lua_State *L) { luaL_Reg l[] = { ...
- vs2013 手动生成webservice代理类wsdl
第一步: 第二步: 第三步: 至此wsdl代理类生成成功!
- 使用复合设计模式扩展持久化的CURD,Select能力
大家可能会经常遇到接口需要经常增加新的方法和实现,可是我们原则上是不建议平凡的增加修改删除接口方法,熟不知这样使用接口是不是正确的接口用法,比如我见到很多的项目分层都是IDAL,DAL,IBLL,BL ...
- The Practical Guide to Empathy Maps: 10-Minute User Personas
That’s where the empathy map comes in. When created correctly, empathy maps serve as the perfect lea ...
- 【转】关于FLASH中图文混排聊天框的小结
原文链接 图文混排也是FLASH里一个很古老的话题了,我们不像美国佬那样游戏里面聊天框就是聊天框,全是文字干干净净,也不像日本人发明了并且频繁地使用颜文字.不管是做论坛.做游戏,必定要实现的一点就是带 ...
- jasmine入门
本文来自http://blog.fens.me/nodejs-jasmine-bdd 粉丝日志 张丹 前言TDD(Test Driven Development)测试驱动开发,是敏捷开发中提出的最 ...
- 关于i和j
算法课无聊随手写了段c代码,发现了个问题,就要下课了,先记一下 for(int i = 0; i < 100; i ++) for(int j = 0; j < 100000; j ++) ...
- Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板
很久没有写博客了,这段时间比较忙,又是搬家又是做自己的项目,还有太多琐碎的事情缠身,好不容易抽出时间把最近自己做的一些简单例子记录一下. 在我的项目中,我需要一个显示面板来显示游戏中的一个三维数据,例 ...
- 2016huasacm暑假集训训练五 J - Max Sum
题目链接:http://acm.hust.edu.cn/vjudge/contest/126708#problem/J 题意:求一段子的连续最大和,只要每个数都大于0 那么就会一直增加,所以只要和0 ...
- Android分享一款漂亮的折叠书架菜单
一个Android折叠书架菜单,效果极佳,给人的视觉感觉很好,便于使用. FoldingMenu