2012-05-25 10 views
14

Kiedy zrobićJak mogę wyświetlić wszystkie właściwości obiektu Math?

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

uzyskać listę właściwości i metod

Howver kiedy zrobić to samo dla "Math" obiektu okiennych, dostaję nic.

typeof "window" == typeof "Math" 

powraca TRUE, więc nie widzę powodu, dlaczego moja pętla nie działa.

To dziwne, jak gdybym pisał bezpośrednio Math[E] Otrzymuję wartość stałej E.

UPDATE

Dziękuję. Wszystkie odpowiedzi były pomocne i zapewniały dokładnie to, co chciałem. Poprawiłem większość z nich.

Odpowiedz

11

Nie wszystkie właściwości obiektu są iteracyjne. Dostaniesz tylko iterowalne właściwości w pętli for..in.

Ponieważ większość właściwości window (która jest obiektem globalnym) to zdefiniowane przez użytkownika zmienne globalne, są one przeliczalne.

W nowoczesnych silnikach JavaScript można użyć Object.getOwnPropertyNames(obj) uzyskać wszystkie właściwości, zarówno przeliczalny i non-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"] 

Zobacz Is it possible to get the non-enumerable inherited property names of an object? więcej szczegółów.

+0

Dzięki za wyjaśnienie! Ale czy istnieje sposób na wyzyskanie własności obiektu Math w tym przypadku? –

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

można uzyskać listę tych kluczy w nowoczesną przeglądarkę z Object.getOwnPropertyNames(Math); Powyższe działa we wszystkich znaczących przeglądarek pod warunkiem Ci shimmed .forEach

+0

Dzięki! Nie wiedziałem, że getOwnPropertyNames –

+0

Ta osoba dostaje głosowanie w dół ... dlaczego? –

+0

Chciałem zapytać o to samo ... – Esailija

3
console.log(Object.getOwnPropertyNames(Math)); 
Powiązane problemy