[笔记]《ECMAScript 6 入门》中的经典例子(2)
2018-02-22 21:18
337 查看
第三章 变量的解构赋值let [foo, [[bar], baz]] = [1, [[2], 3]];
foo // 1
bar // 2
baz // 3
let [ , , third] = ["foo", "bar", "baz"];
third // "baz"
let [x, , y] = [1, 2, 3];
x // 1
y // 3
let [head, ...tail] = [1, 2, 3, 4];
head // 1
tail // [2, 3, 4]
let [x, y, ...z] = ['a'];
x // "a"
y // undefined
z // []正确的赋值示范
function* fibs() {
let a = 0;
let b = 1;
while (true) {
yield a;
[a, b] = [b, a + b];
}
}
let [first, second, third, fourth, fifth, sixth] = fibs();
sixth // 5整个是0 1 1 2 3 5,原理还没有很懂。let [foo = true] = [];
foo // true
let [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'
let [x = 1] = [undefined];
x // 1
let [x = 1] = [null];
x // null当一个变量严格等于undefined时(其实就是他本身被赋了undefined),那就用他的默认值,如果赋的不是undefined,就用赋的值。let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
baz // "aaa"
let obj = { first: 'hello', last: 'world' };
let { first: f, last: l } = obj;
f // 'hello'
l // 'world'
let { foo: baz } = { foo: "aaa", bar: "bbb" };
baz // "aaa"
foo // error: foo is not defined对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。但如果等号右边没有属性名,比如没有foo,则会报错。
foo // 1
bar // 2
baz // 3
let [ , , third] = ["foo", "bar", "baz"];
third // "baz"
let [x, , y] = [1, 2, 3];
x // 1
y // 3
let [head, ...tail] = [1, 2, 3, 4];
head // 1
tail // [2, 3, 4]
let [x, y, ...z] = ['a'];
x // "a"
y // undefined
z // []正确的赋值示范
function* fibs() {
let a = 0;
let b = 1;
while (true) {
yield a;
[a, b] = [b, a + b];
}
}
let [first, second, third, fourth, fifth, sixth] = fibs();
sixth // 5整个是0 1 1 2 3 5,原理还没有很懂。let [foo = true] = [];
foo // true
let [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'
let [x = 1] = [undefined];
x // 1
let [x = 1] = [null];
x // null当一个变量严格等于undefined时(其实就是他本身被赋了undefined),那就用他的默认值,如果赋的不是undefined,就用赋的值。let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
baz // "aaa"
let obj = { first: 'hello', last: 'world' };
let { first: f, last: l } = obj;
f // 'hello'
l // 'world'
let { foo: baz } = { foo: "aaa", bar: "bbb" };
baz // "aaa"
foo // error: foo is not defined对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。但如果等号右边没有属性名,比如没有foo,则会报错。
let {length : len} = 'hello'; len // 5
let x = 1; let y = 2; [x, y] = [y, x];交换变量好简单。
const 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) { // ... }其实很想java的map,这个遍历方法也像foreach的感觉,但是应该是由于JS的结构比java要不严谨一些?或者说可能是因为二者封装方式有一些不同,所以感觉更方便。太底层了,原理不懂,都是猜的,但是的确好用。
相关文章推荐
- [笔记]《ECMAScript 6 入门》中的经典例子(1)
- [笔记]《ECMAScript 6 入门》中的经典例子(3)
- MyBatis笔记----MyBatis 入门经典的两个例子: XML 定义与注解定义
- SQL Server 2008编程入门经典笔记(第三章:T-SQL基本语句)
- 【Android】【笔记】《Android 入门经典》part 3 安卓开发组件
- SQL Server 2008编程入门经典笔记:表连接
- Visaul C++ 2010 入门经典 学习笔记(1)
- 黑马程序员 C#学习笔记④ 入门经典里的扑克牌游戏客户程序
- 一个经典的ADO.NET入门例子
- ASP.NET 2.0入门经典学习笔记.txt
- 【Android】【笔记】《Android 入门经典》part 4 Android布局管理
- VC++入门经典学习笔记--纯虚函数
- ECMAScript 6 入门笔记(六)Class
- Linux 防火墙iptables 学习笔记(一)入门要领 非常经典的防火墙讲解
- c#经典入门--学习笔记
- Mybatis入门笔记--简单例子
- 【算法竞赛入门经典】第四章:函数和递归笔记和代码
- Spring学习笔记1--简介及入门例子
- 〈数据库设计入门经典〉之第一章笔记
- JSP经典学习笔记(包含各种入门常用语法)