您的位置:首页 > 其它

[笔记]《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,则会报错。
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要不严谨一些?或者说可能是因为二者封装方式有一些不同,所以感觉更方便。太底层了,原理不懂,都是猜的,但是的确好用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: