前言
這本書的中冊還是相當(dāng)值得推薦的徘六。
就算對在異步流程中已經(jīng)踩過很多坑的我來說,也還是有些可以值得學(xué)習(xí)的東西榴都。
只把自己記下來的東西寫一下待锈,推薦大家還是可以看書。
JSON.stringify(obj,arg1,arg2)
對于符合的JSON會轉(zhuǎn)換嘴高,對于不符合的JSON 格式會忽略炉擅。不符合的JSON格式如下:
undefined
function
symbol
arg1 可以是一個(gè)數(shù)組,包含序列化之后留下來的屬性名稱
JSON.stringify({a:1,b:2},['a']) //'{"a":1}'
arg1還可以是一個(gè)函數(shù)阳惹,函數(shù)有兩參谍失,一個(gè)是key,一個(gè)是value
arg2是一個(gè)正整數(shù)莹汤,表示格式化后的縮進(jìn)快鱼。這個(gè)在某些時(shí)候比較好用。例如谷歌瀏覽器的console.log的實(shí)現(xiàn)是一個(gè)異步的過程纲岭。所以想要準(zhǔn)確的獲得某個(gè)點(diǎn)的對象值抹竹,一個(gè)是debugger,另一個(gè)就是該對象的副本止潮。我最常用的實(shí)現(xiàn)方式JSON.stringify(obj,null,2)
窃判。
一些難以理解但又可以解釋的操作
//parseInt系列
parseInt(1/0,19) // parseInt("Infinity",19) => parseInt("I",19) => 18
parseInt(0.000008) //0
parseInt(0.0000008) // parseInt("8e-7") => 8
parseInt(false,16) //parseInt("fa",16) => 250
parseInt(parseInt,16)//parseInt("function",16) => 15
//如果一邊是字符串或數(shù)字,一邊是對象喇闸,則x == ToPrimitive(y)
''42" == true //false
"42" == false //false
//下面都是對的
0 == []
"" == []
false == []
//
[] + {} //[object object]
{} + [] // 0
一些不常用的東東
try{}catch(){}finally{} 中finally里面的return會覆蓋catch和try中的return
DOM中的ID會在全局創(chuàng)建一個(gè)同名變量
ASI自動糾錯(cuò)機(jī)制袄琳,會根據(jù)換行自動插入分號
promise
promise比回調(diào)好的地方
- 回調(diào)不可信任,永遠(yuǎn)不知道回調(diào)是否是異步燃乍,導(dǎo)致執(zhí)行順序問題唆樊,某些情況下還會產(chǎn)生競價(jià)狀態(tài)
- 代碼邏輯不符合人腦
學(xué)到一個(gè)promiseify,可以將擁有回調(diào)函數(shù)并且錯(cuò)誤優(yōu)先的函數(shù)包裝成一個(gè)promise
const promiseify = function(fn){
return function(...args){
return new Promise((rs,rj)=>{
fn.call(null,...args,function(err,data){
if(err){
return rj(err);
}
rs(data);
});
});
};
};