無事愛翻書——你不知道的JavaScript 中卷
短評
翻完了中卷,整體評價三星。不是很感興趣。讀這本書的時候缺乏興趣,看的很局促,很多內(nèi)容沒有仔細(xì)閱讀。
很多內(nèi)容,我更傾向于在其他地方閱讀,比如 MDN和口水掘金。
結(jié)構(gòu)
本書分為四部分 : 類型types 語法grammar 異步async 和性能performance
類型和語法
typeof
所有 typeof
返回 object
的對象,比如數(shù)組,都包含一個內(nèi)部屬性 [[Class]
,這可以視為內(nèi)部的一個分類,一般通過這種方式獲得
Object.prototype.toString.call(new Date())
//"[object Date]"
Object.prototype.toString.call([1])
//"[object Array]"
document.all
falsy(虛值)是在 Boolean 上下文中已認(rèn)定可轉(zhuǎn)換為‘假‘的值.
document.all
是一個對象,但在在類型轉(zhuǎn)換時候會視為 false
,這個是為了對歷史代碼的兼容性,很多代碼用這個判斷是否是 ie
if(document.all){
// ie
alert('ie')
}
|| && 返回值
和直覺可能不一樣,||
&&
返回的值不一定是布爾值,而是兩個操作數(shù)其中一個的值。但并不影響你直覺上的判斷結(jié)果。
var a =0;
var b ='abc'
var c=null
a||b;
b||c
a&&b
在 C
和php
里會返回true或者false,但在js
python
ruby
里返回的某個操作數(shù)的值。
判斷會對左邊進行條件判斷,如果不是布爾值會強制類型轉(zhuǎn)換,然后計算
返回的是什么值?
如果是
||
運算,左邊是true就返回左邊,如果是false就返回右邊如果是
&&
操作,如果是true就返回右邊,false返回左邊
所以
function a(a,b){
a = a || 'defalut'
b = b || 'd2'
return a+','+b
}
這里會對兩邊進行 ||
判斷,結(jié)果是真返回左邊,結(jié)果否返回右邊
小細(xì)節(jié)
else if并不存在
else if 不是規(guī)定的語法,是自己發(fā)明的語法
if(){
}else {
if(){}
}
//這里簡寫成了 else if
異步
異步這里,收獲不是很大,說的不感興趣。
但后續(xù)可以整理 promise/A+ 規(guī)范
對生成器不感興趣,哈欠連連,看豆瓣評論很多人也表示需要細(xì)細(xì)品讀,變相承認(rèn)寫的缺乏吸引力
性能
Web Worker
有些處理密集的任務(wù)需要執(zhí)行,希望以多線程的方式執(zhí)行。
應(yīng)用場景:
- 密集的數(shù)學(xué)計算
- 大數(shù)據(jù)集排序
- 數(shù)據(jù)處理,壓縮,音頻分析 圖像處理等
- 高流量網(wǎng)絡(luò)通信
SIMD
單指令多數(shù)據(jù),杜宇數(shù)據(jù)密集型的應(yīng)用,性能收益明顯。不是很詳細(xì)。
其他的都忽略了
性能調(diào)試
寫的非常局促,沒有展開說。
循環(huán)運行多次操作求平均值的做法不正確,推薦使用 benchmark.js
來獲取性能結(jié)果,也有一個網(wǎng)站可以搜集不同設(shè)備上的性能數(shù)據(jù) jspref.com
。
性能優(yōu)化應(yīng)該關(guān)注大局,關(guān)鍵路徑應(yīng)該付出努力優(yōu)化,費關(guān)鍵路徑可以忽略。
結(jié)論
懷疑是我菜,還達(dá)不到刨根究底的地步,收獲不大。