如何列出Math对象的所有属性?

luk*_*nis 15 javascript

当我做

for (var i in window) console.log(window[i])
Run Code Online (Sandbox Code Playgroud)

我得到了一个窗口属性和方法列表

当我为"数学"对象做同样的事情时,我什么都没得到.

typeof "window" == typeof "Math"
Run Code Online (Sandbox Code Playgroud)

返回TRUE,所以我没有看到我的循环不起作用的原因.

这很奇怪,好像我直接写,Math['E']我得到常数E的值.

UPDATE

谢谢.所有答案都很有帮助,并提供了我想要的.我赞成他们中的大部分.

Thi*_*ter 11

并非所有对象属性都是可迭代的.您只能在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"]
Run Code Online (Sandbox Code Playgroud)

请参阅是否可以获取对象的不可枚举的继承属性名称?更多细节.


Esa*_*ija 8

["max", "ceil", "SQRT2", "PI", "pow", "log", 
"LOG2E", "tan", "sqrt", "exp", "random", "min",
"floor", "atan2", "cos", "atan", "acos", "abs", 
"round", "asin", "LN2", "LOG10E", "sin",
"E", "SQRT1_2", "LN10"].forEach( function(key ) {
    if( Math[key] ) {
        console.log( key, Math[key] );
    }
});
Run Code Online (Sandbox Code Playgroud)

您可以在现代浏览器中获取这些键的列表.Object.getOwnPropertyNames( Math );如果您使用了shimmed,则可以在所有值得注意的浏览器中使用上述功能.forEach