《javascript語言精粹》讀書筆記五

來源:互聯網
上載者:User

標籤: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語言精粹》讀書筆記五

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.