前言
這本書的中冊還是相當(dāng)值得推薦的。
就算對在異步流程中已經(jīng)踩過很多坑的我來說,也還是有些可以值得學(xué)習(xí)的東西。
只把自己記下來的東西寫一下,推薦大家還是可以看書。
JSON.stringify(obj,arg1,arg2)
對于符合的JSON會(huì)轉(zhuǎn)換,對于不符合的JSON 格式會(huì)忽略。不符合的JSON格式如下:
undefinedfunctionsymbol
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會(huì)覆蓋catch和try中的return
DOM中的ID會(huì)在全局創(chuàng)建一個(gè)同名變量
ASI自動(dòng)糾錯(cuò)機(jī)制,會(huì)根據(jù)換行自動(dòng)插入分號
promise
promise比回調(diào)好的地方
- 回調(diào)不可信任,永遠(yuǎn)不知道回調(diào)是否是異步,導(dǎo)致執(zhí)行順序問題,某些情況下還會(huì)產(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);
});
});
};
};