2012-05-25 33 views
14

Khi tôi làmLàm thế nào tôi có thể liệt kê tất cả các thuộc tính của đối tượng Math?

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

tôi nhận được một danh sách các thuộc tính cửa sổ và phương pháp

Howver khi tôi làm như vậy cho đối tượng "Math", tôi nhận được gì.

typeof "window" == typeof "Math" 

lợi nhuận TRUE, vì vậy tôi không thấy có lý do tại sao vòng lặp của tôi không hoạt động.

Thật kỳ lạ như thể tôi viết trực tiếp Math[E] Tôi nhận giá trị hằng số E.

CẬP NHẬT

Cảm ơn bạn. Tất cả các câu trả lời đều hữu ích và cung cấp chính xác những gì tôi muốn. Tôi upvoted hầu hết trong số họ.

Trả lời

11

Không phải tất cả các thuộc tính đối tượng đều có thể lặp lại được. Bạn sẽ chỉ nhận được các thuộc tính có thể lặp lại trong vòng lặp for..in.

Vì hầu hết các thuộc tính của window (xảy ra là đối tượng chung) là các biến toàn cầu do người dùng xác định, chúng được liệt kê.

Trong động cơ Javascript hiện đại, bạn có thể sử dụng Object.getOwnPropertyNames(obj) để có được tất cả các tài sản, cả đếm được và không 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"] 

Xem Is it possible to get the non-enumerable inherited property names of an object? để biết thêm chi tiết.

+0

Cám ơn một lời giải thích! Nhưng có cách nào để liệt kê các thuộc tính của đối tượng Math trong trường hợp này không? –

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

Bạn có thể có được một danh sách những phím trong một trình duyệt hiện đại với Object.getOwnPropertyNames(Math); Các công trình trên trong tất cả các trình duyệt đáng chú ý cung cấp cho bạn shimmed .forEach

+0

Cảm ơn! Tôi không biết getOwnPropertyNames –

+0

Cái này bị bỏ phiếu ... tại sao? –

+0

Đã sắp hỏi cùng một điều ... – Esailija

3
console.log(Object.getOwnPropertyNames(Math)); 
Các vấn đề liên quan