《JavaScript語言精粹》讀書筆記

讀了這本書,增長了不少js的知識。下面羅列一下以前在學習和使用js過程中,忽略的問題:

1、JavaScript支持兩種註釋方式,/* */塊註釋 和 //行註釋。但是儘量避免使用/* */塊註釋,因爲在JavaScript中,這個符號可能出現在正則表達式中,所以塊註釋對於被註釋的代碼塊來說是不安全的。例:

/*
var rm_a = /a*/.match(s);
*/ 

會導致一個語法錯誤。

2、JavaScript只有一個單一的數字類型。它在內部被表示爲64位的浮點數。1和1.0是相同的值。

3、JavaScript的所有字符都是16位的。JavaScript沒有字符類型,要表示一個字符,只需要創建僅包含一個字符的字符串即可。

4、每個對象都連接到一個原型對象,並且它可以從中繼承屬性。所有通過對象字面量創建的對象都連接到Object.prototype這個JavaScript標準對象。

當創建一個新對象時,你可以選擇某個對象作爲它的原型。JavaScript提供的實現機制雜亂而複雜,但其實它可以被明顯簡化。我們將給Object對象增加一個beget方法,這個方法可以創建一個使用原對象作爲其原型的新對象。

原型連接只有在檢索值時纔會被用到,如果我們嘗試去獲取對象的某個屬性值,且該對象沒有此屬性值,那麼JavaScript會嘗試從原型對象中獲取屬性值,如果那個原型對象也沒有此屬性值,那麼再從它的原型中尋找,以此類推,直到到達原型鏈的根Object.prototype。如果想要的屬性不存在於原型鏈,那麼結果就是undefined值。

5、delete運算符可以刪除對象的屬性。它將會移除對象中確定包含的屬性,不會觸及原型鏈中的任何對象。刪除對象的屬性可能會讓原型鏈中的屬性浮現出來。

例:

stooge的nickname初始值爲“Curly”

another_stooge.nickname = "Mack";

document.write(another_stooge.nickname); //Mack

delete another_stooge.nickname;

document.write(another_stooge.nickname);   //Curly

但是如果不使用 another_stooge.nickname獲取nickname值時,使用for in遍歷時將不會出現nickname屬性,但是一旦使用了another_stooge.nickname,那麼使用for in遍歷時就會出現nickname屬性。

發佈了15 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章