一起來啃《JavaScript語言精粹》----對象

一、引言

任何編程語言在設計的時候就存在精華與糟粕并存,《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ù)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容