ES6学习笔记(2)
变量的解构赋值
ES6
允许按照一定模式,从数组和对象中提取值,对变量进行赋值,被称为解构(Destructuring);
数组的解构赋值
let [a, b, c] = [1, 2, 3];
console.log(a); //=> 1
console.log(b); //=> 2
console.log(c); //=> 3
这种写法称为 "模式匹配",只要等号两边的模式相同,左边的变量会被赋予右边对应的值.
let [a, , c] = [1, 2, 3];
console.log(a); //=> 1
console.log(c); //=> 3
let [a, ...b] = [1, 2, 3, 4];
console.log(a); //=> 1
console.log(b); //=> [2, 3, 4]
let [a, b, '''c] = [1];
console.log(a); //=> 1
console.log(b); //=> undefined 解构不成功
console.log(c); //=> []
当等号左右的模式只匹配右边的一部分时,称之为不完全机构
在不完全解构的情况下依然可以解构成功
let [a, b] = [1, 2, 3];
console.log(a); //=> 1
console.log(b); //=> 2
let [a, [b], c] = [1, [2, 3, 4], 5];
console.log(a); //=> 1
console.log(b); //=> 2
console.log(c); //=> 5
只要数据结构具有
Iterator
接口,都可以采用数组的解构赋值
在解构赋值的时候,也可以提前给变量一个默认值,当一个变量有默认值的时,将会判断对应数组里的值 与 undefined 比较, 如果为真,这赋值默认值
let [a, b = 2, c = 3, d = 4] = [5, 6, undefined, null];
console.log(a); //=> 5
console.log(b); //=> 6
console.log(c); //=> 3
console.log(d); //=> null
对象的解构赋值
对象的解构赋值,需要等号的变量与右边对象的属性同名,才能取得正确的值
var {a, b, c} = {a: 111, b: 222};
console.log(a); //=> 111
console.log(b); //=> 222
console.log(c); //=> undefined
若变量名和属性名不一致,同时也想该变量名取到值,可通过以下的方式
var {a, b: c} = {a: 111, b: 222, c: 333};
console.log(a); //=> 111
console.log(c); //=> 222
事实上,以上只是一种形式的简写,原来的形式为
var {a: a, b: c} = {a: 111, b: 222, c: 333};
ES6
只是将等号右边的对象的属性的值赋值给左边同属性名下的变量
与数组一样,对象也同样可以用于嵌套解构,甚至与数组相互嵌套
!对于对象的简写,有种情况下需要小心使用,即该变量已经声明过.
var x;
{x} = {x: 1}; //=> error
因为 JS
会将 {x}
当成一个代码块而执行其内的语句.因此需要将他包含在一个()
里.即({x} = {x: 1})
字符串的解构赋值
字符串可转换为类似数组的对象,同时也具有对象的一些属性,比如length
.因此字符串也可以使用解构赋值
const [a,...b] = "hello";
console.log(a); //=> "h"
console.log(b); //=> ["e", "l", "l", "o"]
let {length} = "hello";
console.log(length); //=> 5 等效于 "hello".length
数值和布尔值的解构赋值
解构赋值时,如果等号右边是数值或布尔值,则先转为对象
函数参数的解构赋值
function add([x, y, z = 1]) {
console.log(x + y + z);
}
add([1, 2]); //=> 1 + 2 + 1 = 4
PS:有了解构赋值,写法将变的非常简洁,代码也变得更加容易阅读.
ES6学习笔记(2)的更多相关文章
- es6学习笔记-class之一概念
前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
- ES6学习笔记<四> default、rest、Multi-line Strings
default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...
- ES6学习笔记<三> 生成器函数与yield
为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口 ...
- ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
- ES6学习笔记<一> let const class extends super
学习参考地址1 学习参考地址2 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015:也 ...
- ES6学习笔记之块级作用域
ES6学习笔记:块级作用域 作用域分类 全局作用域 局部作用域 块级作用域 全局作用域示例 var i=2; for (var i = 0; i < 10; i++) { } console.l ...
- ES6学习笔记之变量的解构赋值
变量的解构赋值 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构. 数组的解构赋值 以前,为变量赋值,只能直接指定值: 1 2 3 var a = 1; var b = 2; ...
- ES6学习笔记(三):教你用js面向对象思维来实现 tab栏增删改查功能
前两篇文章主要介绍了类和对象.类的继承,如果想了解更多理论请查阅<ES6学习笔记(一):轻松搞懂面向对象编程.类和对象>.<ES6学习笔记(二):教你玩转类的继承和类的对象>, ...
- JS&ES6学习笔记(持续更新)
ES6学习笔记(2019.7.29) 目录 ES6学习笔记(2019.7.29) let和const let let 基本用法 let 不存在变量提升 暂时性死区 不允许重复声明 块级作用域 级作用域 ...
随机推荐
- C#遍历指定文件夹中的所有文件和子文件夹
参考:http://www.cnblogs.com/skylaugh/archive/2012/09/23/2698850.html DirectoryInfo TheFolder=new Direc ...
- 基于.NET平台常用的框架整理【转】
转:http://www.cnblogs.com/hgmyz/p/5313983.html 自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产 ...
- Oracle用户密码过期后重置SYS用户密码
问题状况: SYS.SYSTEM用户的密码过期,无法登陆. 运行EM控制台后,出现错误——ORA-28001: the password has expired (DBD ERROR: OCISess ...
- 安装zabbix,make的时候报错
CDPATH= && /bin/bash /install/Mesa-/bin/missing aclocal-1.14 -I m4 /install/Mesa-/bin/missin ...
- 实现Cookie跨域共享
实现原理:cookie是不能跨域访问的,但是在二级域名是可以共享cookie的 概念说明:站点1=a.abc.com 站点2=b.abc.com 实现步骤:1. 配置两个站点的webconfig ...
- HTML CSS
HTML CSS css是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化.存在方式有三种:元素内联.页面嵌入和外部引入,比较三种方式的优缺点.语法:styl ...
- 全景VR视频游戏外包公司:技术分享使用U3D+CB制作VR游戏
随着Oculus宣布1月6日开启预售,2016年很可能成为VR游戏元年,但很多的调研显示,手游设备才是市场增长的关键,SuperData发布的报告显示,2016年全球VR游戏市场规模预计在51亿美元左 ...
- C# 随机红包算法
static void Main(string[] args) { ; ; double minAmount = 0.01; Random r = new Random(); ; i < num ...
- DHTMLX-Grid
DHTMLX - Grid 介绍 dhtmlxGrid是一个灵活的.易于使用的JavaScript网格组件,可以创建DHTML表与丰富的编辑- sensing,固定的多行页眉和页脚,可调整大小的.可拖 ...
- 多个Python环境的构建:基于virtualenv 包
假如一台计算中安装多个Python版本,而不同版本可能会pip安装不同的包,为了避免混乱,可以使用virtualenv包隔离各个Python环境,实现一个Python版本对应一套开发环境. 本地概况: ...