JavaScript ---屬性

獲取屬性

能夠經過點(.)或方掛號([])運算符來獲取屬性的值。javascript

對於點(.)來講,右側必須是一個以屬性名稱命名的簡單標識符。對於[]來講,方掛號內必須是一個計算結果爲字符串的表達式。java

var author = book.author;//獲得book的'author'屬性spa

var title = book['main title'];//獲得book的'main title'對象

在ECMAScript 3中,點運算符後的標識符不能是保留字,好比,o.for或o.class是非法的;必須使用方掛號形式訪問o['for']。繼承

在ECMAScript 5中對此放寬限制。ip

在C/C++一些強類型語言中,對象只能擁有固定數目的屬性,而且這些屬性名稱必須提早定義好。字符串

因爲javascript是弱類型語言,在任何對象中均可以建立任意數量的屬性。it

-----------------------------------------------------------------------------------------------------------------------------------class

查詢屬性

查詢一個不純在的屬性並不會報錯,若是在對象o自身的屬性或繼承的屬性中均未找到屬性,返回undefined。方法

可是,若是對象不存在,那麼試圖查詢這個不存在的對象的屬性就會報錯。null和undefined值都沒有屬性。

固然,給null和undined設置屬性也會報類型錯誤。有一些屬性是隻讀的,不能從新賦值。

book.author = 'abc';

-----------------------------------------------------------------------------------------------------------------------------------

刪除屬性

delete運算符能夠刪除對象的屬性。delete只是斷開屬性和宿主對象的關聯,而不會去操做屬性中的屬性

delete book.author;

delete book['main title'];

delete運算符只能刪除自有屬性,不能刪除除繼承屬性。

---------------------------------------------------------------------------------------------------------------------------------------

檢測屬性

in運算符、hasOwnPreperty()和propertyIsEnumerable()方法來檢測屬性。

var o = {x:1};

'x' in o;//true

'y' in o;//flase

'toString' in o;//true

對象的hasOwnProperty()方法用來檢測給定的名字是不是對象的自有屬性。對於繼承屬性返回false

o.hasOwnProperty('x');//true

o.hasOwnProperty('y');//false

o.hasOwnProperty('toString');//false,toString是繼承屬性

對象的propertyIsEnumerable(),只有檢測到是自有屬性卻這個屬性的可枚舉性爲true時才返回true。

除了使用in,另外一種更簡單的方法是使用'!=='判斷一個屬性是不是undefined。

o.x!==undefined;//true

o.y!==undefined;//false

o.toString!==undefined;//true

相關文章
相關標籤/搜索