▓▓▓▓▓▓ 大致介绍

  解构:就是将声明的一组变量和与相同结构的数组或者对象的元素数值一一对应,并将变量相对应元素进行赋值

▓▓▓▓▓▓ 数组解构

  例子:

    let [a,b,c] = [1,2,3];
console.log(a); //
console.log([a,b,c]); //[1, 2, 3]

  可以看到,数组中的a,b,c分别对应1,2,3

  嵌套的数组也可以进行解构

    let [a,[b,[c]]] = [1,[2,[3]]];
console.log(c); // let [d,,e] = [1,2,3];
console.log(e); // let [f,...tail] = [1,2,3];
console.log(tail); //[2, 3]

  在解构不成功时,变量的值就是undefined

    let [a,b] = [1];
console.log(b); //undefined

  不完全解构也是可以的

    let [a,b,c] = [1,2,3,4];
console.log(c); //

  也可以设置默认值

    let [a = 1] = [];
console.log(a); // let [b = 1] = [2];
console.log(b); // let [c = 1] = [undefined];
console.log(c); // let [d = 1] = [null];
console.log(d); //null

  注意:在ES6中使用严格相等运算符(===)。所以如果默认值不严格相等undefined,默认值就不会生效。例如null

  默认值也可以是表达式,但是要注意只有默认值在使用时才会触发函数(惰性求值)

    function f(){
alert(1);
} let [a = f()] = [3]; //f()不会执行 let [b = f()] = [undefined]; //会执行

▓▓▓▓▓▓ 对象解构

  例子:

    let {foo,bar} = {foo:1,bar:2};
console.log(foo); //

  注意:与数组不同,对象解构时不是根据位置对变量赋值的,而是通过变量名进行赋值,即变量名和属性名必须相等才可以进行赋值,位置不重要

    let {bar,foo} = {foo:1,bar:2};
console.log(foo);//

  如果变量名和属性名不相同,则要采取下面的方法

    let {first: f,last: l} = {first:1,last:3};
console.log(l); //

  意思就是先在对象中查找first属性,如果有就赋值给f,其中first是匹配的模式,而f才是真正的变量

  所以对象解构的完整形式是:

    let {first: first,last: last} = {first:1,last:3};

  对象解构也可以进行嵌套

    let obj = {
a:1,
b:[
'hello',
{c:'world'}
]
} let {a: a,b: [h,{c:w}]} = obj; console.log(a); //
console.log(h); //hello
console.log(w); //world

  对象解构也可以设置默认值,并且如果解构失败,变量会赋值undefined

    let {x: x = 1,y: y=2,z: z=3,w: w} = {x:3,y:null,z:undefined};

    console.log(x) //
console.log(y) //null
console.log(z) //
console.log(w) //undefined

▓▓▓▓▓▓ 字符串解构

  字符串之所以能够解构是因为此时字符串转换成了一个数组

    let [a,b,c] = 'hello';
console.log(a); //h
console.log(b); //e
console.log(c); //l

▓▓▓▓▓▓ 数值和布尔值解构

  解构赋值时,如果等号右边是数值和布尔值,则会先转为对象

    let {toString: s} = 123;
s === Number.prototype.toString // true let {toString: a} = true;
a === Boolean.prototype.toString // true

  上面代码中,数值和布尔值的包装对象都有tostring属性,因此变量s都能取到值。

  解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于null和undefined无法转为对象,所以对它们进行解构赋值,都会报错。

参考资料: 

        ECMAScript 6入门-阮一峰

ECMAScript6-解构的更多相关文章

  1. ECMAscript6新特性之解构赋值

    在以前,我们要对变量赋值,只能直接指定值.比如:var a = 1;var b = 2;但是发现这种写法写起来有点麻烦,一点都不简洁,而在ECMAScript6中引入了一种新的概念,那就是" ...

  2. ECMAScript6学习笔记 ——let、const、变量解构赋值

    let 不存在变量提升 通过let声明的变量仅在块级作用域内有效 不允许在同一个作用域内重复声明一个变量 防止值公用 var oUl = document.querySelectorAll('ul&g ...

  3. ECMAScript6 - 2.变量的解构赋值

    1.数组解构赋值 1.1.基本用法 // (1)对数组变量赋值 let [foo, [[bar], baz]] = [1, [[2], 3]]; foo; // 1 bar; // 2 baz; // ...

  4. ECMAScript6 入门教程记录 变量的解构赋值

    (1)变量的解构赋值 基本用法:ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). let a = 1; let b = 2; let c = ...

  5. ES6新特性2:变量的解构赋值

    本文摘自ECMAScript6入门,转载请注明出处. ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring).不仅适用于var命令,也适用于let和c ...

  6. ES6 - 解构(数组和对象)

    解构对象 /** * 解构:快捷,方便 * * 对象解构 */ { var expense = { type: "es6", amount: "45" }; / ...

  7. 豪情-CSS解构系列之-新浪页面解构-01

    目录: 一. 新浪的布局特点 二. 内容细节的特点 三. 其中相关的一些基础技术点 1. 常见布局方法 2. 布局要点 3. Debugger误区 4.列表 5.字体颜色 6.CSS选择符 7.CSS ...

  8. es6之变量的解构赋值

    es5中通常我们声明变量都是以下的方式: var a = 10; var b = 20; var c = 30; //或者 var a = 10,b = 20,c = 30; //或者 var arr ...

  9. ES6之解构赋值

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

  10. 用vue.js学习es6(三):数组、对象和函数的解构

    一.数组的解构: 以前的方式: var arr = [1,2,3]; console.log(arr[0]); //1 console.log(arr[1]); //2 现在的方式: var [a,b ...

随机推荐

  1. Swift 2.0 UItableView 的简单使用

    在IOS开发中,UItableView 的使用真的是最常见最普通的了,现在在自学swift 今天也是这用Swift 写了写 UItableview的使用,还有一些经常出错的地方.下面我先把整个控制器的 ...

  2. FZU 1889 龟兔赛跑

    Problem 1889 龟兔赛跑 Accept: 1240    Submit: 1650Time Limit: 1000 mSec    Memory Limit : 32768 KB Probl ...

  3. 子进程 已安装 post-installation 脚本 返回错误状态 1,dpkg: 处理软件包 python-crypto (--configure)时出错: 该软件包正处于非常不稳定的状态;

    这几天在学习redis的时候,装软件总是报错,两个问题都和dpkg有关,上网查阅了些解决办法,发现整体来说执行以下方法均可解决. 虽然每个人需要安装的包不同,但是出现此类问题的不同也只有安装包的名字, ...

  4. 推荐一款好用的WSL终端模拟器

    Windows 10 中包含了一个 WSL(Windows Subsystem for Linux)子系统,我们可以在其中运行未经修改过的原生 Linux ELF 可执行文件.利用它我们可以做很多事情 ...

  5. could not resolve host: github.com 问题解决办法

    向github提交代码时出现问题,如图: 代码push失败,提示could not resolve host: github.com     解决办法:   1.打开终端,输入:ping github ...

  6. 前端数据统计用做Bootstrap的一些柱状图、饼状图和折线图案例

    Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. Bootstrap ...

  7. 301、404、200、304、500HTTP状态

    一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务器超时 下面提供 HTTP 状态码的完整列表.点击链接可了解详情.您也可以访问 HTTP 状态码上的 ...

  8. Ubuntu14.04: Error found when loading /root/.profile

    问题描述: 启用root账号登录后系统出现如下提示信息: Error found when loading /root/.profile stdin:is not a tty 解决方法: 在终端中用命 ...

  9. PHP解耦的三重境界(浅谈服务容器)

    阅读本文之前你需要掌握:PHP语法,面向对象 在完成整个软件项目开发的过程中,有时需要多人合作,有时也可以自己独立完成,不管是哪一种,随着代码量上升,写着写着就"失控"了,渐渐&q ...

  10. Java面试09|多线程

    1.假如有Thread1.Thread2.Thread3.Thread4四条线程分别统计C.D.E.F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现? 把相互独立的计算任 ...