一、引言
任何編程語言在設計的時候就存在精華與糟粕并存,《JavaScript語言精粹》這本書就是取其精華,去其糟粕,能讓我寫出更優(yōu)雅性能更好的JavaScript代碼。
二、對象的檢索
- 1.[]后綴中括住一個字符串表達式。
- 2.如果字符串表達式是一個字符串字面量,而且它是一個合法的標識符且不是保留字,那么也可以用 . 表示法代替。我們優(yōu)先使用 . 表示法,因為它更緊湊且可讀性更好。
obj['name-child']
obj.user.name - 如果你嘗試檢索一個不存在的成員屬性的值,將返回undefined。|| 運算符可以用來填充默認值:
var obj1 =obj['name-child'] || 'none'
var obj1 =obj.age || 'unknown' -
嘗試從undefined的成員屬性中取值將會導致TypeError異常。這時可以通過 && 運算符來避免錯誤。
Paste_Image.png
三、引用
對象通過引用來傳值。它們永遠不會被復制:
var x = obj;
x.name = 'han';
var y = obj.name;//因為x和obj是指向同一個對象的引用,所以y為'han'

Paste_Image.png
四、原型
- 沒個對象都連接到一個原型對象,并且它可以從中繼承屬性。所有通過對象字面量創(chuàng)建的對象都連接到Object.prototype,它是JavaScript中的標配對象。

Paste_Image.png
- 原型連接在更新時是不起作用的。當我們對某個對象做出改變時,不會觸及該對象的原型。

Paste_Image.png
- 原型關系是一種動態(tài)關系。如果我們添加一個新的屬性到原型中,該屬性會立即對所有基于該原型創(chuàng)建的對象可見。

Paste_Image.png
五、枚舉
-
for in 語句可用來遍歷一個對象中的所有屬性名。該枚舉過程將會列出所有的屬性--包括函數(shù)和你可能不關心的原型中的屬性--所以有必要過濾掉那些你不想要的值。最常見的過濾器是hasOwnProperty方法,以及使用typeof來排除函數(shù):
Paste_Image.png - 屬性名出現(xiàn)的順序是不確定的,如果你想要確保屬性以特定的順序出現(xiàn),最好的辦法就是完全避免使用 for in 語句,而是創(chuàng)建一個數(shù)組,在其中以正確的順序包含屬性名:

Paste_Image.png
通過使用 for 而不是 for in ,可以得到我們想要的屬性,而且不用擔心可能發(fā)掘出原型鏈中的屬性,并且我們按正確的順序取得了它們的值。
六、刪除
- delete 運算符可以用來刪除對象的屬性。如果對象包含該屬性,那么該屬性就會被移除,它不會觸及原型鏈中的任何對象。刪除對象的屬性可能會讓來自原型鏈中的屬性透現(xiàn)出來:

Paste_Image.png
七、減少全局變量污染
- JavaScript可以很隨意地定義全局變量來容納你的應用的所有資源。但是它削弱了程序的靈活性,應該避免使用。
方法一、為你的應用只創(chuàng)建一個唯一的全局變量:
var MyApp = {};
該變量此時變成了你的應用的容器:
MyApp.stooge = {
'first-name': 'Joe',
'last-name': 'Howard'
};
方法二、使用閉包來進行信息隱藏,此方法將在下一章進行描述《JavaScript語言精粹》--函數(shù)

