2012-05-25 24 views
14

Cuando hago¿Cómo puedo enumerar todas las propiedades del objeto Math?

for (var i in window) console.log(window[i]) 

puedo obtener una lista de propiedades y métodos

howver cuando lo haga lo mismo por objeto "Matemáticas" de la ventana, no consigo nada.

typeof "window" == typeof "Math" 

vuelve VERDADERO, por lo que no ven una razón por la que mi bucle no está funcionando.

Es extraño como si escribiera directamente Math[E] obtengo el valor de constante E.

ACTUALIZACIÓN

Gracias. Todas las respuestas fueron útiles y proporcionaron exactamente lo que quería. Yo voté por la mayoría de ellos.

Respuesta

11

No todas las propiedades de objeto son iterables. Solo obtendrá propiedades iterables en un bucle for..in.

Dado que la mayoría de las propiedades de window (que pasa a ser el objeto global) son variables globales definidas por el usuario, son enumerables.

En los motores modernos de JavaScript puede utilizar Object.getOwnPropertyNames(obj) para obtener todas las propiedades, tanto enumerables y no enumberable:

>>> 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"] 

Ver Is it possible to get the non-enumerable inherited property names of an object? para más detalles.

+0

Gracias por la explicación! ¿Pero hay una manera de enumare propiedades del objeto Math en este caso? –

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]); 
    } 
}); 

Usted puede obtener una lista de las teclas en un navegador moderno con Object.getOwnPropertyNames(Math); lo anterior funciona en todos los navegadores notables que siempre shimmed .forEach

+0

¡Gracias! No sabía getOwnPropertyNames –

+0

Este tiene un voto negativo ... ¿por qué? –

+0

Estaba a punto de preguntar lo mismo ... – Esailija

3
console.log(Object.getOwnPropertyNames(Math)); 
Cuestiones relacionadas