2013-08-30 252 views
5

我已經使用Object.definePropertyenumerable: false在配置對象上定義了一些屬性。然而在我的模塊中有一個地方我想迭代不可枚舉的屬性以及可枚舉的屬性。是否有可能在不保留其他地方名稱列表的情況下做到這一點?迭代非枚舉屬性

回答

8

我想你可以使用getOwnPropertyNames它返回屬性,可枚舉或不可以。

從文檔:

返回在給定的對象直接 找到的所有屬性(枚舉與否)的陣列。

+0

一個例子,我需要在我的項目中:循環所有數學函數/常量。 var mathProps = Object.getOwnPropertyNames(Math); mathProps然後是[「E」,「LN10」,「LN2」....] –

+0

@DanielHoward是的,但它也包括'toSource';你可能不想要。一般來說,您需要確保將結果過濾到您期望的結果(無論是使用白名單還是黑名單),因此它可能僅適用於內省或序列化代碼,以及類似的情況,您要應用的位置一個不關心返回哪些屬性(或者哪個對象傳遞給它)的通用操作,它只需要所有這些操作。 – jpaugh