2013-08-30 210 views
5

我已经使用Object.definePropertyenumerable: false在配置对象上定义了一些属性。然而在我的模块中有一个地方我想迭代不可枚举的属性以及可枚举的属性。是否有可能在不保留其他地方名称列表的情况下做到这一点?迭代非枚举属性

回答

8

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

从文档:

返回在给定的对象直接 找到的所有属性(枚举与否)的阵列。

+0

一个例子,我需要在我的项目中:循环所有数学函数/常量。 var mathProps = Object.getOwnPropertyNames(Math); mathProps然后是[“E”,“LN10”,“LN2”....] –

+0

@DanielHoward是的,但它也包括'toSource';你可能不想要。一般来说,您需要确保将结果过滤到您期望的结果(无论是使用白名单还是黑名单),因此它可能仅适用于内省或序列化代码,以及类似的情况,您要应用的位置一个不关心返回哪些属性(或者哪个对象传递给它)的通用操作,它只需要所有这些操作。 – jpaugh