讀javascript語言精粹-毒瘤(蝴蝶書)

直接說不好的地方

毒瘤

1.全局變量
2.es5沒有塊級作用域,es6以上開始擁有
3.return{
}和 return
{
}是有區(qū)別的,后者報錯
4.有很多保留關(guān)鍵字,也就是這些你不能用,比如
var class 是非法的;再比如:var object={case:value}也是非法的 等等。如果非要用關(guān)鍵字,請加上“”引號。 比如var object={“case”:value}是可行的。
5.Unicode的區(qū)別:提一句,unicode把一對字符視為一個單一的字符,而javascrpt認(rèn)為一對字符是兩個不同的字符。
6.typeof
特殊的typeof null 是object,有更好的檢測null的方式,my_value === null
也有更好的方式檢測,(因?yàn)閚ull為false)如下:
if(my_value && typeof my_value === 'object'){}
7.關(guān)于parseInt
我只想說 parseInt("08",10);這樣的方式就不會有錯誤了。
8.+號
這是一個復(fù)雜的行為,為了確保你的目的,請保證兩個運(yùn)算數(shù)都是整數(shù)。
9.浮點(diǎn)數(shù)的精度問題
可以先乘以100再除以100進(jìn)行避免
10.NaN
isNaN 辨別是數(shù)字與NaN
isNaN(NaN) //true
isNaN(0) //false
isNaN('ppp') //true
isNaN('0') //false 
isFinite判斷一個值是否可以用作數(shù)字,因?yàn)門A可以篩除掉NaN和Infinity,遺憾的是,TA試圖把運(yùn)算數(shù)轉(zhuǎn)為數(shù)字,所以,如果值不是一個數(shù)字,TA就不是一個好的測試。
但是,我們可以自定義方法
var isNumber = function isNumber(value){
    return typeof value === 'number' && isFinite(value);
}
11.偽數(shù)組
javascript沒有真正的數(shù)組,所以TA不會產(chǎn)生越界錯誤,但是性能和真的數(shù)組比,要糟糕很多。
typeof不能辨別數(shù)組和對象,要判斷一個值是否為數(shù)組,還要檢查TA的constructor 屬性
if(my_value && typeof my_value === 'object' && my_value.constructor === Array){//my_value是一個數(shù)組}
上面的檢測在不同幀或窗口創(chuàng)建的數(shù)組將給出false。所以下面的檢測更為可靠
if(Object.prototype.tostring.apply(my_value) === '[object Array]'){
//確實(shí)是一個數(shù)組
}
另外,arguments數(shù)組并不是一個數(shù)組,TA只是一個有著length成員屬性的對象。
12.javascript中的眾多假值
    1.0 Number
    2.NaN Number
    3.'' String
    4.false Boolean
    5.null Object
    6.undefined Undefined
注意的是:它們都是不可互換的,`不要因?yàn)樗鼈冎g并非都相等進(jìn)行誤解`;還有如果這些值都加上‘’引號,則都是真值。
13.hasOweProperty
這是一個方法,很容易被替換,一般情況下不會產(chǎn)生。
14.對象
javascript中的對象永遠(yuǎn)不會是真的空對象,因?yàn)樗鼈兛梢詮脑玩溨腥〉贸蓡T的屬性。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容