2009-03-11 38 views
6

Sự khác nhau giữa for..in và câu lệnh each..in trong javascript là gì? Có sự khác biệt tinh tế nào mà tôi không biết hoặc là nó giống nhau và mọi trình duyệt đều có tên khác cho nó?Sự khác nhau giữa for..in và cho mỗi..in trong javascript là gì?

+0

Điều này không được chấp nhận bởi [Sự khác nhau giữa 'cho… trong' và' cho… của' trong javascript là gì?] (Http://stackoverflow.com/q/29285897/1048572) – Bergi

Trả lời

12

"cho mỗi ... trong" lặp lại biến được chỉ định trên tất cả các giá trị thuộc tính của đối tượng được chỉ định.

Ví dụ:

var sum = 0; 
var obj = {prop1: 5, prop2: 13, prop3: 8}; 
for each (var item in obj) { 
    sum += item; 
} 
print(sum); // prints "26", which is 5+13+8 

Source

"cho ... trong" lặp một biến cụ thể trên tất cả các thuộc tính của một đối tượng, theo thứ tự tùy ý.

Ví dụ:

function show_props(obj, objName) { 
    var result = ""; 
    for (var i in obj) { 
     result += objName + "." + i + " = " + obj[i] + "\n"; 
    } 
    return result; 
} 

Source


Note 03,2013, for each... in vòng là deprecated. Cú pháp 'mới' được MDN đề xuất là for... of.

+0

Trình duyệt này có cụ thể không? –

+0

@Vijay: có - nó đã được giới thiệu trong JavaScript 1.6, tức là một phần mở rộng Mozilla – Christoph

2

Đọc tài liệu MDC tuyệt vời.

first là dành cho vòng lặp bình thường trên bộ sưu tập và tùy ý trên các thuộc tính của đối tượng.

Vòng lặp for ... không lặp qua các thuộc tính tích hợp. Chúng bao gồm tất cả các phương thức dựng sẵn của các đối tượng, chẳng hạn như phương thức indexOf của String hoặc phương thức toString của đối tượng. Tuy nhiên, vòng lặp sẽ lặp lại trên tất cả các thuộc tính do người dùng định nghĩa (bao gồm bất kỳ thuộc tính nào ghi đè lên các thuộc tính dựng sẵn).

A cho ... trong vòng lặp lặp qua các thuộc tính của một đối tượng theo thứ tự tùy ý. Nếu một thuộc tính được sửa đổi trong một lần lặp và sau đó được truy cập vào một thời gian sau đó, giá trị được tiếp xúc bởi vòng lặp sẽ là giá trị của nó tại thời điểm sau đó. Một tài sản bị xóa trước khi nó được truy cập sẽ không được truy cập sau đó. Các thuộc tính được thêm vào đối tượng mà việc lặp lại xảy ra có thể được truy cập hoặc bỏ qua từ lần lặp. Nói chung, tốt nhất là không thêm, sửa đổi hoặc loại bỏ các thuộc tính khỏi đối tượng trong khi lặp lại, ngoài thuộc tính hiện đang được truy cập; không có gì đảm bảo cho dù thuộc tính được thêm vào có được truy cập hay không, liệu thuộc tính đã sửa đổi có được truy cập trước hoặc sau khi nó được sửa đổi hay không hoặc liệu tài sản bị xóa có được truy cập trước khi nó bị xóa hay không.

latter cho phép bạn lặp qua thuộc tính của đối tượng.

Lặp lại biến được chỉ định trên tất cả các giá trị của thuộc tính của đối tượng. Đối với mỗi thuộc tính riêng biệt, một câu lệnh được chỉ định được thực hiện.

7

Trình diễn này hy vọng minh họa sự khác biệt.

var myObj = { 
    a : 'A', 
    b : 'B', 
    c : 'C' 
}; 
for each (x in myObj) { 
    alert(x);  // "A", "B", "C" 
} 
for (x in myObj) { 
    alert(x);  // "a", "b", "c" 
    alert(myObj[x]); // "A", "B", "C" 
} 
2

Bên cạnh những câu trả lời khác, hãy ghi nhớ rằng for each...in không phải là một phần của tiêu chuẩn ECMA và cũng không được bao gồm trong upcoming edition 3.1. Nó được giới thiệu trong JavaScript 1.6, là một nền tảng của Tổ chức Mozilla.

Theo trang Wikipedia được liên kết, trang này chỉ được triển khai trong Firefox 1.5+ và Safari 3.x (+?).

+0

Nói cách khác, đó là "chỉ Firefox". –

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