對象

1.JavaScript的簡單數(shù)據(jù)類型包括數(shù)字、字符串、布爾值(true和false)、null值和undefined值。其他所有的值都是對象。數(shù)字、字符串和布爾值“貌似”對象,因為它們擁有方法,但它們是不可變的。

JavaScript中的對象是可變的鍵控集合(keyed collections)

屬性的名字可以是包括空字符串在內的任意字符串。屬性的之可以是除了undefined值之外的任何值。

JavaScript包含一種原型鏈的特性,允許對象繼承另一個對象的屬性。正確地使用它能減少對象初始化時消耗的時間和內存。

2.對象字面量

對象字面量可以出現(xiàn)在任何允許表達式出現(xiàn)的地方

如果屬性名是一個合法的JavaScript標識符且不是保留字,則并不強制要求用引號括住屬性名。

3.檢索

檢索一個并不存在的成員屬性,將返回undefined.....TypeError

stooge["first-name"] ?//"Jerome" 通用

flight.departure.IATA ?// "SYD" 優(yōu)先(合法標識符且不是保留字)

4.更新

如果屬性名已經(jīng)存在于對象里,那么這個屬性的值就會被替換

如果對象之前沒有擁有那個屬性名,那么該屬性就被擴充到對象中

5.引用

對象通過引用來傳遞。它們永遠不會被復制。

var x = stooge;

x.nickname = 'Curly';

var nick = stooge.nickname;

// 因為 x 和 stooge 是指向同一個對象的引用,所以nick為‘Curly'。

var a = {}, b = {}, c = {};

// a、b和c每個都引用一個不同的空對象

a = b = c = {};

// a、b和c都引用同一個空對象

6.原型

每個對象都連接到一個原型對象,并且它可以從中繼承屬性。

所有通過對象字面量創(chuàng)建的對象都連接到Object.prototype(標配對象)。

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

原型連接只有在檢索值的時候才被用到。

委托

如果我們嘗試去獲取對象的某個屬性值,但該對象沒有此屬性名,那么JavaScript會試著從原型對象中獲取屬性值。如果那個原型對象也沒有該屬性,那么再從它的原型中尋找,依此類推,直到該過程最后到達終點Object.prototype。如果想要的屬性完全不存在于原型鏈中,那么結果就是undefined值。這個過程稱為委托。

(1)屬性名

(2)原型對象屬性值

(3)原型

7.反射 ??

typeof ? 原型鏈中的任何屬性都會產(chǎn)生值

兩個方法去掉這些不需要的屬性, 第一個是讓你的程序做檢查并丟棄值為函數(shù)的屬性。一般來說,當你想讓對象在運行時動態(tài)獲取自身信息是,你關注更多的是數(shù)據(jù),而你應該意識到一些值可能會是函數(shù)。

另一個方法是使用hasOwnProperty方法,如果對象擁有獨有的屬性,它將返回true。hasOwnProperty方法不會檢查原型鏈。

8. 枚舉

for in 語句可用來便利一個對象中的所有屬性名。

屬性名出現(xiàn)的順序是不確定的。如果你想要確保屬性以特定的順序出現(xiàn),最好的方法就是完全避免使用for in語句,而是創(chuàng)建一個數(shù)組,在其中以正確的順序包含屬性名。

通過使用for而不是 for in,可以得到我們想要的屬性,而不用擔心可能發(fā)掘出原型鏈中的屬性,并且我們按正確的順序取得了它們的值。

9.刪除

delete運算符可以用來刪除。

它不會觸及原型鏈中的任何對象

刪除對象的屬性可能會讓來自原型鏈中的屬性透現(xiàn)出來

10.減少全局污染

全局性的資源都納入一個名稱空間之下

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容