ES6(二)解构赋值详解
详解一下之前的解构赋值
①解构赋值中的“...”
let [a,...b]= [1];
b // [] ...代表变量b去匹配剩余的所有元素返回一个数组 ,匹配不到时返回[]
//注意:"...b"只能放在最后
②解构赋值的等号两边的数据类型必须一样
即:
let [] = [] 或者 let {} = {}
但是:Set结构也允许使用数组进行解构赋值
let [a,b]= new Set([1,2,3,4])
a //
b //
技巧: 如果你不确定该结构是否能够解构赋值,判断其是否有Iterator接口就可以啦!判断方法如下:
function* fibs() {
var x= 0;
var y= 1;
while (true) {
yield x;
[x, y] = [y, x+ y];
}
}
var [a, b, c, d, e, f] = fibs();
f//
// fibs是一个Generator函数,原生具有Iterator接口。解构赋值会依次从这个接口获取值。
③解构赋值不仅适用于 let / const也适用于var指令
④解构赋值允许添加默认值
let [a = 4] = []
a //
(解构赋值的匹配模式是===)注:如果解构赋值不严格等于 undefined 的话默认值不会生效
let [a = 4]=[undefined]
a //4
let [b = 4]=[null]
b//null
⑤我自己犯过的错
let [x = y, y = 1] = []; //报错 因为x=y时y还没有被声明 不会被提升!!! 牢记
var [a = b, b = 1] = []; // a===undefined b === 1
对象的解构赋值
①对象不像数组那样有顺序所以,对象的解构赋值是按照‘键’的方式匹配的
var { foo: baz } = { foo: 'aaa', bar: 'bbb' };
baz // 'aaa' foo是匹配模式 baz是变量
②对象和数组的嵌套 如果看明白一下例子也就差不多了
var obj = {
p: [
'Hello',
{ y: 'World' }
]
};
var { p: [x, { y }] } = obj; //p是匹配模式 [x , { y }]是值 然后再看数组中的每一项
x // "Hello"
y // "World"
③不像数组那样不存在时返回undefined 对象是会报错的
字符串的解构赋值
const [a, b, c, d, e] = 'hello';
a // h
b // e
c // l
let {length : len} = 'hello';
len // 5 匹配的是字符串的length属性
干货:用途
(1)交换变量的值
[a,b]=[b,a]
(2)从函数返回多个值
function example() {
return [1, 2, 3];
}
var [a, b, c] = example();
(3)函数参数的定义
function f([x, y, z]) { ... }
f([1, 2, 3]);
(4)提取JSON数据
var jsonData = {
id: 42,
status: "OK",
data: [867, 5309]
};
let { id, status, data: number } = jsonData;
(5)函数参数的默认值
function f([x = 1, y = 2 , z]) { ... }
(6)遍历Map结构
var map = new Map();
map.set('first', 'hello');
map.set('second', 'world'); for (let [key, value] of map) {
console.log(key + " is " + value);
}
// first is hello
// second is world
// 获取键名
for (let [key] of map) {
// ...
}
// 获取键值
for (let [,value] of map) {
// ...
}
(7)输入模块的指定方法
const { SourceMapConsumer, SourceNode } = require("source-map");
ES6(二)解构赋值详解的更多相关文章
- ES6 解构赋值详解
解构赋值是对赋值运算符的扩展,可以将属性/值从对象/数组中取出,赋值给其他变量. 一.数组的解构赋值 1.基本用法 只要等号两边的模式相同,左边的变量就会被赋予对应的值. let [a, [[b], ...
- ES6解构赋值详解
文章转载自:http://www.zhufengpeixun.cn/article/167 解构赋值(destructuring assignment)语法是一个 Javascript 表达式,这种语 ...
- 【ES6 】ES6 解构赋值--数组解构赋值
定义 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构 数组的解构赋值 以前,为变量赋值,只能直接指定值. let a = 1; let b = 2; let c = 3; ...
- 【ES6 】ES6 解构赋值--对象解构赋值
对象的解构与数组有一个重要的不同. 数组的元素是按次序排列的,变量的取值由它的位置决定 而对象的属性没有次序,变量必须与属性同名,才能取到正确的值. 基本用法 如果解构失败,变量的值等于undefin ...
- 001-es6变量声明、解构赋值、解构赋值主要用途
一.基本语法 1.1.声明变量的六种方法 参看地址:http://es6.ruanyifeng.com/#docs/let let:局部变量,块级作用域,声明前使用报错 var:全局变量,声明前使用 ...
- ES6入门之变量的解构赋值(二)
前言 在上一章 ES6入门之let和const命令中我们对ES6的相关语法已经有了初步了解,上一章中我们主要学习了三大部分的内容,let命令的使用,块级作用域,const命令的使用,那么从本篇博客将进 ...
- ES6笔记(3)-- 解构赋值
系列文章 -- ES6笔记系列 解构赋值,即对某种结构进行解析,然后将解析出来的值赋值给相关的变量,常见的有数组.对象.字符串的解构赋值等 一.数组的解构赋值 function ids() { ret ...
- es6入门2--对象解构赋值
解构赋值:ES6允许按照一定规则从数组或对象中提取值,并对变量进行赋值.说直白点,等号两边的结构相同,右边的值会赋给左边的变量. 一.数组的解构赋值: 1.基本用法 let [a, b, c] = [ ...
- 《ES6标准入门》(阮一峰)--3.变量的解构赋值
1.数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前,为变量赋值,只能直接指定值. let a = 1; l ...
随机推荐
- javascript数据结构-队列
gihub博客地址 队列(Queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插 ...
- 介绍一个非常好用的跨平台C++开源框架:openFrameworks
介绍一个非常好用的跨平台C++开源框架:openFrameworks 简介 首先需要说明的一点是: openFrameworks 设计的初衷不是为计算机专业人士准备的, 而是为艺术专业人士准备的, 就 ...
- 核心动画 - CAKeyframeAnimation 简单应用
核心动画: 登录按钮的抖动效果: CAKeyframeAnimation * kfAnimation = [CAKeyframeAnimation animationWithKeyPath:@&quo ...
- UIStackView
既要温故又要知新...温故而知新,我懂. 在Cocoachina上看到了,UIStackView. 没用过额,试iOS9的新特性.一研究,妈的还挺眼熟.一想,这不和Android上的线性布局一样么.. ...
- Func与Action
平时我们如果要用到委托一般都是先声明一个委托类型,比如: private delegate string Say(); string说明适用于这个委托的方法的返回类型是string类型,委托名Say后 ...
- C#静态常量和动态常量的区别
C#拥有两种不同的常量:静态常量(compile-time constants)和动态常量(runtime constants).它们有不同的特性,错误的使用不仅会损失效率,还可能造成错误.相比之下 ...
- testng 教程之使用参数的一些tricks配合使用reportng
前两次的总结:testng annotation生命周期 http://www.cnblogs.com/tobecrazy/p/4579414.html testng.xml的使用和基本配置http: ...
- jQuery hover事件
hover(over,out)一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法.这是一个自定义的方法,它为频繁使用的任务提供了一种"保持在其中"的状态. 当鼠标移动到 ...
- Apache与Nginx对客户端请求的处理机制对比
Apache与Nginx对客户端请求的处理机制对比 模块 大致为四个模块,核心模块.HTTP模块.邮件模块,以及第三方模块 核心模块主要包含两类功能的支持,一类是主体功能,包括进程管理,权限管理,错误 ...
- Spring中bean的作用域scope详解
参考文献:http://blog.csdn.net/jacklearntech/article/details/40157861 http://www.cnblogs.com/qq78292959/p ...