2012-10-18 191 views
1

在閱讀一本書的JavaScript,我讀了實驗JavaScript屬性屬性默認

所有數據屬性默認爲true的屬性時「直接在對象上定義的」。

然後經過一番描述,再一次說,

「當你使用Object.defineProperty()」,可配置,可枚舉,並 寫默認爲false值,除非另有規定。

我想,在「直接在對象上定義的」第一條語句是指使用點操作人員或物體的文字符號是這樣的:

var obj = new Object(); 
obj.name = "Mahesh"; 

但有什麼辦法進行試驗,以檢查什麼這些屬性已經被設置爲,在通過任一方法將屬性添加到對象之後?

+0

'console.log(obj)'?在Chrome控制檯或FireBug中,您應該可以展開該節點並查看其所有屬性設置爲的內容。 –

+2

至少有[Object.propertyIsEnumerable](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable)。我不確定'可配置'和'可寫'。 – bfavaretto

+0

@bfavaretto你是對的,使用Object.propertyIsEnumerable()允許至少爲[[enumerable]測試我的理解),它的行爲方式與本書所說的完全相同 – Mahesha999

回答

3

您可以使用getOwnPropertyDescriptor

> var desc = Object.getOwnPropertyDescriptor(obj, 'name'); 
{"value":"Mahesh","writable":true,"enumerable":true,"configurable":true} 

desc將包含標誌configurableenumerable。如果該屬性是數據描述符(不是getset),desc也將包含value和標誌writable。如果該屬性是訪問者描述符,則desc也將包含getset方法。

+0

很高興知道。 'defineProperty'上的MDN頁面缺少一個鏈接。 – bfavaretto