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:解构赋值的更多相关文章

  1. ES6 的解构赋值前每次都创建一个对象吗?会加重 GC 的负担吗?

    本文来源于知乎上的一个提问. 为了程序的易读性,我们会使用 ES6 的解构赋值: function f({a,b}){} f({a:1,b:2}); 这个例子的函数调用中,会真的产生一个对象吗?如果会 ...

  2. ES6之解构赋值

    截止到ES6,共有6种声明变量的方法,分别是var .function以及新增的let.const.import和class: 我们通常的赋值方法是: var foo='foo'; function ...

  3. 进军es6(2)---解构赋值

    本该两周之前就该总结的,但最近一直在忙校招实习的事,耽误了很久.目前依然在等待阿里HR面后的结果中...但愿好事多磨!在阿里的某轮面试中面试官问到了es6的掌握情况,说明es6真的是大势所趋,我们更需 ...

  4. es6的解构赋值学习(1)

    相对es5的简单的"="赋值来说,es6增加了一种新的赋值模式--解构赋值,按照它的规则,可以从数组和对象中提取值来对变量进行赋值,个人觉得方便了很多,但是这个模式有点恶心人,相比 ...

  5. Es6 新增解构赋值

    1.数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 要想实现解构,就必须是容器,或者具有可遍历的接口. 以前,为 ...

  6. ES6 之 解构赋值

    本博文配合 阮一峰 <ES6 标准入门(第3版)>一书进行简要概述 ES6 中变量的解构赋值. 数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这 ...

  7. ES6变量解构赋值

    ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构ES6之前我们申明多个变量需要按照下面的方法: let l a=1; let b=2; let c=3; let d=4; ...

  8. es6变量解构赋值的用途

    这里是我觉得es6解构赋值,在平时我们写js的时候非常有用,而且经常用到的地方,能简化我们的代码,让写代码简介优雅易读; 用途 1.交换变量的值,太方便了这逼,写法不仅简介而且一看就明白 let [x ...

  9. 粗看ES6之解构赋值

    标签: javascript es6 什么是解构赋值? 示例如下: <!DOCTYPE html> <html> <head> <meta charset=& ...

  10. ES6变量解构赋值的用法

    一.数组赋值(从数组中提取值,按照对应位置,对变量赋值) 1. 完全解构(变量与值数目相等) let arr = [1, 2, 3]; let [a,b,c] = arr; console.log(a ...

随机推荐

  1. CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)

    CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)   在CSS3中,可以利用transform功能来实现文字或图像的旋转.缩放.倾 ...

  2. 反射 Class类和Class实例

  3. Python之路第一课Day4--随堂笔记(迭代生成装饰器)

    上节回顾: 1.集合 a.关系测试 b.去重 2.文件操作及编码 3.函数 4.局部变量和全局变量 上节回顾 本节课内容: 1.迭代器生成器 2.装饰器 3.json pickle数据序列化 4.软件 ...

  4. 利用@media screen实现网页布局的自适应

    利用@media screen实现网页布局的自适应 优点:无需插件和手机主题,对移动设备友好,能够适应各种窗口大小.只需在CSS中添加@media screen属性,根据浏览器宽度判断并输出不同的长宽 ...

  5. IOS第二天-新浪微博 - 添加搜索框,弹出下拉菜单 ,代理的使用 ,HWTabBar.h(自定义TabBar)

    ********HWDiscoverViewController.m(发现) - (void)viewDidLoad { [super viewDidLoad]; // 创建搜索框对象 HWSearc ...

  6. MapleSim助力长臂挖掘机建模问题解决

    1.问题描述 一家机械零部件设计公司需要一个挖掘机模型,验证他们的零部件是否匹配完整的挖掘机系统.由于他们是一个零部件供应商,公司没有足够的资源和研发人员使用传统的工具创建一个完整系统的详细模型.然而 ...

  7. SQL Server最近怎样了

    SQL Server最近怎样了 又到年终了,大家都作最后冲刺 最近园子里真的多了很多口水帖,无论大家争论得多么激烈,时间依然滴答滴答地过,争论完之后我们依然要继续埋头苦干 为年终奖.为明年做准备 这里 ...

  8. 春节前最后一篇,CRUD码农专用福利:PDF.NET之SOD Version 5.1.0 开源发布(兼更名)

    废话不多说,直接入正题,明天赶着坐火车回老家过年. 从2013.10.1日起,原PDF.NET将更名为 SOD :- one SQL-MAP,ORM,Data Control framework 原P ...

  9. Guava库介绍之集合(Collection)相关的API

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...

  10. Android什么时候进行View中Background的加载

    对大多数Android的开发者来说,最经常的操作莫过于对界面进行布局,View中背景图片的加载是最经常做的.但是我们很少关注这个过程,这篇文章主要解析view中背景图片加载的流程.了解view中背景图 ...