1.数值解构赋值

ES6 允许按照一定模式,可以从数组中提取值,按照对应位置,对变量赋值,这被称为解构。

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

  数组

1 let [a,b,c] = [1,2,3];
2 a //1
3 b //2
4 c //3
5
6 let [,,better]=[1,2,3];
7 better //3

如果解构不成功,值为  underfind

1 let [ a , b ,  ...c] = ['a'];
2 a //a
3 b //underfind
4 c //[]

事实上,只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值

解构是允许默认值的,默认值可以引用解构赋值的其他变量,但该变量必须已经声明。只有当赋值=== underfind时,默认值才生效。

let [a = '123' , b = '456' ] = ['c ' , 'underfind'];
a //c
b //'underfnd'

  对象

对象的解构属性没有次序,变量必须与属性同名,才能取到正确的值。

对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。

1  let {foo :baz } = {foo:'fiist',bar:'second'};
2 baz // first
3 foo // error: foo is not defined

上面代码中,foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo

 注意

  

1 // 错误的写法
2 let x;
3 {x} = {x: 1};
4 // SyntaxError: syntax error

上面代码的写法会报错,因为 JavaScript 引擎会将{x}理解成一个代码块,从而发生语法错误。只有不将大括号写在行首,避免 JavaScript 将其解释为代码块,才能解决这个问题。

1 // 正确的写法
2 let x;
3 ({x} = {x: 1});

ES6随笔D1的更多相关文章

  1. ES6随笔

    let, const 这两个的用途与var类似,都是用来声明变量的,但在实际运用中他俩都有各自的特殊用途.首先来看下面这个例子: var name = 'zach' while (true) { va ...

  2. es6 随笔

    记录一些学习es6中学习的新特性,挺有用,作为日后复习es6用,便于记忆. 1.变量定义let和const es6用let.const代替,let是定义块级作用域中的变量,const声明之后必须赋值, ...

  3. JavaScript ES6 数组新方法 学习随笔

    JavaScript ES6 数组新方法 学习随笔 新建数组 var arr = [1, 2, 2, 3, 4] includes 方法 includes 查找数组有无该参数 有返回true var ...

  4. ES6里class杂乱随笔

    这是一篇乱七八糟的随笔.class是ES6新增的特性,用于解决JavaScript没有类的困惑. --杂谈 ES5及之前,类都是用函数来替代,包括实例. 如: 1 function Person(na ...

  5. ES6学习随笔--字符串模板、解构赋值、对象、循环、函数、Promise、Generrator

    在线编译器:babel.github 在nongjs中使用 'use strict' let a = ; 运行node : node --harmony_destructuring xxx.js 代码 ...

  6. 关于es6 import export的学习随笔

    记得之前的一次面试中,有个面试官问了我关于es6导入和导出的一些知识点,可惜当时对这方面没在意,只知道每次机械的import和export,也不知道为啥要这样用,现在静下心来,好好的把这块看了下,顺便 ...

  7. ES6字符串随笔

    ES6对JavaScript的变动的很大,增加了一些新特性. 字符串模板: 字符串模块使用``来表示,相比原来使用双引号来标记,多了许多便利性 1 // 原始的标记使用+来连接,遇到一些复杂的字符串会 ...

  8. webpack随笔2--编译ES6/ES7

    一.Babel 1.安装babel Bable-loader: babeljs.io babel最新版:npm install babel-loader@8.0.0-beta.0 @babel/cor ...

  9. es6之变量的解构赋值

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

随机推荐

  1. CF31B Sysadmin Bob 题解

    Content 给定一个字符串 \(s\),请将其分解为诸如 \(\texttt{xx@xx}\) 的子串,并将分解后的所有子串输出,或者说不存在这样的方案. 数据范围:\(1\leqslant|s| ...

  2. 【嵌入式AI】全志 XR806 OpenHarmony 鸿蒙系统固件烧录

      欢迎关注我的公众号 [极智视界],回复001获取Google编程规范   O_o   >_<   o_O   O_o   ~_~   o_O   大家好,我是极智视界,本教程详细记录了 ...

  3. 使用docker logs -f 打印日志中文无法正常显示

    打印docker日志的时候 中文无法显示 显示了问号 在Dockerfile加入 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US ...

  4. JAVA中CountDownLatch的简单示例

    public static void main(String[] args) throws InterruptedException { CountDownLatch latch =new Count ...

  5. git命令行常用操作总结

    关于 更多使用细节(grammar和book),请参考 官网 1.上传代码 1.1 创建自己的远程Repository, github或者gitee 1.2 创建本地git仓库 $ git init ...

  6. 【LeetCode】344. Reverse String 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 新构建字符串 原地翻转 日期 题目地址:https://lee ...

  7. 【LeetCode】174. Dungeon Game 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 日期 题目地址:https://leetc ...

  8. 【LeetCode】861. Score After Flipping Matrix 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  9. Myeclipse查看jdk源代码

    过程如下: 1.点 "window"-> "Preferences" -> "Java" -> "Install ...

  10. 七、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-聊天消息项的实现

    会话好友列表的实现 1.项目引言 2.腾讯云后台配置TXIM 3.配置项目并实现IM登录 4.会话好友列表的实现 5.聊天输入框的实现 6.聊天界面容器的实现 7.聊天消息项的实现 8.聊天输入框扩展 ...