当我做

for (var i in window) console.log(window[i])
我得到了窗口属性和方法的列表
但是,当我对“数学”对象执行相同操作时,却什么也没得到。
typeof "window" == typeof "Math"
返回 TRUE ,所以我看不到循环不起作用的原因。
好像我直接写Math['E']一样,我得到常数 E 的值,这很奇怪。

最佳答案

并非所有对象属性都是可迭代的。您只会在for..in循环中获得可迭代的属性。

由于window的大多数属性(恰好是全局对象)是用户定义的全局变量,因此它们是可枚举的。

在现代JavaScript引擎中,您可以使用Object.getOwnPropertyNames(obj)获取所有可枚举和不可枚举的属性:

>>> Object.getOwnPropertyNames(Math)
["toSource", "abs", "acos", "asin", "atan", "atan2", "ceil", "cos", "exp", "floor", "log", "max", "min", "pow", "random", "round", "sin", "sqrt", "tan", "E", "LOG2E", "LOG10E", "LN2", "LN10", "PI", "SQRT2", "SQRT1_2"]

有关更多详细信息,请参见Is it possible to get the non-enumerable inherited property names of an object?

09-17 16:35
查看更多