2012-09-28 34 views
11

Theo trang MDN tại for each...in loop, cấu trúc này không còn được dùng nữa. Có một sự thay thế nào thực hiện chính xác điều tương tự không? Các for...of loop không lặp qua các thuộc tính không nguyên (sở hữu riêng). Nếu không có thay thế, tại sao họ lại không dùng nó?JavaScript thay thế cho "cho mỗi" vòng lặp

+0

Tốt điểm [thực hiện ở đây] (http://stackoverflow.com/questions/242841/javascript-for-in-vs -cho) – noel

Trả lời

2

Is có một thay thế nào thực hiện chính xác điều tương tự?

Vòng đầu tiên bạn thực hiện trong khối mã là sao chép foo[propertyname] thành biến.

+1

Vâng, tôi đoán chỉ có công việc này, mà thực sự không phải là ngôn ngữ thay thế cho "cho mỗi". Vì vậy, họ không nên không dùng nó, phải không? – user1537366

+0

Theo tôi nhớ điều này chỉ hoạt động trên webkit? – Benedictus

+0

@Benedictus - No. Đó là trong JavaScript 1.0. Netscape 2 hỗ trợ nó! – Quentin

14

Để lặp qua tất cả các thuộc tính của một đối tượng obj, bạn có thể làm điều này:

for (var key in obj) { 
    console.log(key, obj[key]); 
} 

Nếu bạn muốn tránh tài sản thừa kế, bạn có thể làm điều này:

for (var key in obj) { 
    if (!obj.hasOwnProperty(key)) continue; 
    console.log(key, obj[key]); 
} 
11

Bạn có thể tận dụng các ECMAScript 5th Edition chức năng mới:

Object.keys(obj).forEach(function (key) { 
    console.log(key, obj[key]); 
}); 
+3

^đây là cách tôi giải quyết lỗi 'no-restricted-syntax' khỏi eslint khi' forinstatement' được sử dụng. – pherris

Các vấn đề liên quan