#### async
自動執行的generator + promise
```
function *main() {
var res = yield step1();
res = yield step2(res);
res = yield Promise.all([step3a(res), step3b(res)]);
yield step4(res);
}
run(main).then(() => console.log('succeed'), () => console.log(err));
//async
async function main() {
var res = await step1();
res = await step2(res);
res = await Promise.all([step3a(res), step3b(res)]);
await step4(res);
}
main().then(() => console.log('succeed'), () => console.log(err))
//async函數有一個沒有解決的問題,這也是它的缺點,就是無法從外部取消正在運行的async,你只能等到它運行結束然后操作它返給你的promise
```
#### Object.observe(已廢棄)
```
var obj = {a: 1, b: 2};
Object.observe(
obj,
function(changes) {
for(var change of changes) {
console.log(change);
}
},
["add", "update", "delete"]
);
obj.c = 3;
//{name: "c", object: obj, type: "add"}
obj.a = 42;
//{name: "a", object: obj, type: "update", oldValue: 1}
delete obj.b;
//{name: "b", object: obj, type: "delete", oldValue: 2}
```
```
var obj = {a: 1, b: 2};
Object.observe(obj, function observer(changes) {
for(var change of changes) {
if(change.type == "setPrototype") {
Object.unobserve(change.object, observer);
break;
}
}
})
```
#### 冪運算
```
a ** 4; //Math.pow(a, 4)
a **= 3; //a = Math.pow(a, 3)
```
#### 對象屬性與...
```
o3 = {...o1, ...o2, {a: 1}};
//clear
var o1 = {b: 2, c: 3, d: 4}
var {b, ...o2} = o1;
b; //2
o2; //{c: 3, d: 4}
```
#### Array.includes
```
var vals = ["foo", "bar", 42, "baz"];
//查找42的話需要用indexOf,但是indexOf會返回-1或者大于等于0的值,不利于轉換成bool
//因此用
!!(~vals.indexOf(42)); //true (~a=-(a+1))
//es7
vals.includes(42); //true
```
- 你不知道的JS上
- 第一部分 第三章 函數作用域和塊作用域
- 第一部分 第四章 提升
- 第一部分 第五章 閉包
- 第二部分 第一章 關于this
- 第二部分 第二章 this全面解析
- 第二部分 第三章 對象
- 第二部分 第五章 原型
- 第二部分 第六章 行為委托
- 你不知道的JS中
- 第一部分 第二章 值
- 第一部分 第三章 原生函數
- 第一部分 第四章 強制類型轉換
- 第一部分 第五章 語法
- 第二部分 第一章 異步
- 第二部分 第三章 Promise
- 第二部分 第四章 生成器
- 第二部分 第五章 性能
- 你不知道的JS下
- 第一部分 總結
- 第二部分 第二章 語法
- 第二部分 第三章 代碼組織
- 第二部分 第四章 Promise
- 第二部分 第五章 集合
- 第二部分 第六章 新增API
- 第二部分 第七章 元編程
- 第二部分 第八章 ES6之后