能夠經過點(.)或方掛號([])運算符來獲取屬性的值。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