標籤:javascript
第十章 優美的特性
在本章開頭 老道寫到:“我想避開不談瀏覽器和其他適合javascript的地方。”我想要強調其更有分量的內容,以顯示它是值得尊敬的語言。
我也這麼認為,雖然我瞭解的語言種類不多,但是js強大的表現力還是使我深深的愛上了它。
以下是老道認為js種最精粹的部分:
函數是頂級對象 函數是有詞法範圍的閉包。
基於原型繼承的動態對象 對象是無類別的。我們可以通過普通的屬性賦值給任何對象增加一個新成員屬性,一個對象可以從另一個對象繼承成員屬性。
對象字面量和數組字面量 這對建立新的對象和數組來說是一種非常方便的標記法。javascript字面量是資料交換格式JSON的靈感之源。
附錄A 毒瘤
在很多書中附錄往往冗長而缺乏價值(乾貨),本書的附錄才是真正的精華所在,它闡述了js這門語言的毒瘤,糟粕和精華所在。非常值得細細品味和瞭解。
全域變數
全域變數的三種聲明方式:
1、var foo = value;
2、global.foo = value;
3、foo = value;
自動插入分號
js有自動插入分好的習慣,它試圖通過自動插入分好來修正有缺損的程式。但是,這可能會掩蓋更為嚴重的錯誤。
比如對於以下語句就是錯誤的,ex:
return // this will return undefined;{ state : true;}
通過一些編程約定能夠避免這個問題,比如上例應該寫作,就能返回正確的結果:
return { state : true;}
typeof
typeof null返回為‘object’,這說明typeof不能辨別出null對象,但你可以像下面這樣做,已達到目的:
if(x && typeof x === ‘object‘) { // x 是一個對象或者數組}
parseInt
parseInt(“08”)回0,而不是8,因為這裡按照8進位來處理”08”字串,所以建議無論何時都為parseInt函數加上基數參數。
+
+號可以用來被連接字串,這裡導致一系列問題,想必你一定也碰到過100 + ‘11’ –> 10011的時候吧。所以如果打算做加法運算,請確保兩個運算數都是整數。
浮點數
浮點數的小數點後運算不精確,比如0.1+0.2=0.30000000000000004,這個結果是遵循二進位浮點數算數運算標準的(IEEE 754),可以通過乘法來對其進行避免此處可參看(js精確四則運算)。
NAN
NAN不是一個數字,儘管typeof NAN === ‘number‘ // true。NAN不等於它自己,它和任意數進行運算, 結果為NAN。
可以使用 typeof value === ‘number‘ && isFinite(value)對數字進行判斷,這是因為isFinite函數將會篩除掉NAN和Infinity。
假值
js種有一個很大的假值空間:“0, NAN, ”, false, null, undefined”都等同於假值,又不可互換,所以判斷時應該使用‘===‘而不是‘==‘。
這裡需要說明的是,在ie8及以下瀏覽器中,NAN和undefined不是常量,他們的是值是可以改變的,你可以將undefiend賦值成任何你想要的對象。
附錄B 糟粕==
由於js中的”==“運算子會對左值和右值進行類型轉換,所以他違反了傳遞性這種編程約定,所以如同前文提到的一樣盡量使用”===“和”!==“來代替”==“和”!=“。
with和eval
這兩個兄弟對js的運算速度有很大的影響,而又降低的js的可讀性和可檢測性,所以應該盡量避免使用。
continue語句
代碼中移除continue後效能會得到提升。
++ –
當使用這兩者時,代碼變得擁擠,複雜和隱晦。因此,為了代碼風格整潔,不建議使用他。
位元運算符
由於js的運行環境導致其運行時基本解除不到硬體,位元運算符在js種執行速度很慢,建議不要使用它。
function語句和function運算式
推薦使用function運算式,使用樣本如下:
var foo = function foo() {}</code></pre>
這種方式可以明確的表示foo是一個包含一個函數值的變數。
new
new運算子協助我們建立一個繼承原型的新對象,然後調用該運算數,將新建立的對象綁定給this,使得運算數可以返回前者自訂建立的新對象,而當你忘記使用new的時候,得到的是一個普通的函數調用結果,並且this會儲存到全域對象上,對其造成汙染。
所以建議在可能的時候不要使用new運算子。
void
void是一個運算子,它接受一個運算數並返回undefined。這沒有什麼用,應該盡量避免使用它。在ie8及以下瀏覽器中為了防止undefined關鍵字被覆蓋,常常使用void 0來代替undefined。
更多內容請查看zakwu的小站
《javascript語言精粹》讀書筆記五