2014-10-23 13 views
6

Tôi chỉ phát hiện, in Firefox SDK JavaScript (on MDN), việc sử dụng của một từ khóa Tôi chưa bao giờ thấy trước đây:JavaScript 'of` từ khóa (ví ... của vòng)

var tabs = require('sdk/tabs'); 
for (let tab of tabs) 
    console.log(tab.title); 

là từ khóa of tạo thành bởi Mozilla hoặc là nó tiêu chuẩn hóa?

+1

Một phần của ES6. Googling cho "cho vòng lặp ES6" nên bật lên một cái gì đó. –

+5

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of – artm

Trả lời

11

Vòng lặp for...of, lặp qua giá trị thuộc tính, là một đối tượng địa lý là added to the JavaScript specification in EcmaScript 6.

Do bối cảnh của câu hỏi này là một tiện ích bổ sung của Firefox, vấn đề không phải là khi nào, hoặc nếu nó có sẵn trong các trình duyệt khác. Vấn đề là khi điều này EcmaScript 6 feature was added to Firefox và bất kỳ hạn chế về khả năng tương thích ngược mà sử dụng nó gây ra.

Nó đã được thêm vào Firefox ở Firefox 13. Do đó, việc sử dụng nó sẽ dẫn đến hạn chế add-on của bạn là Firefox 13+. Cho rằng bản phát hành hiện tại, tính đến tháng 10 năm 2014, là Firefox 33.0 và đã có nhiều bản phát hành ESR giữa Firefox 13 và bây giờ, sử dụng vòng lặp ... có thể sẽ không làm giảm đáng kể số người có thể sử dụng thêm vao. Có khả năng một số tính năng khác mà bạn đang sử dụng sẽ hạn chế tiện ích bổ sung của bạn thành phiên bản mới hơn.

Nếu bạn có ý định chuyển cổng bổ trợ của mình sang các trình duyệt khác, thì bạn nên biết khi nào tính năng được thêm vào chúng. Như có thể thấy trong Browser Compatibility table on MDN, vấn đề chính là nó không được Internet Explorer hỗ trợ.

Không giống như Array.prototype.forEach(), for...of vòng không chỉ giới hạn ở mảng và sẽ lặp lại trên các loại khác iterable objects. Nếu bạn đang tìm kiếm những cách thức khác để thực hiện một nhiệm vụ tương tự, MDN shows examples của việc sử dụng Array.prototype.forEach() để lặp qua giá trị tài sản cho ArraysObjects:

let arr = [ 3, 5, 7 ]; 
let obj = { first: 3, second: 5, third: 7, fourth: "hello" ]; 

arr.forEach(function (element, index) { 
    console.log(element); // logs "3", "5", "7" 
    console.log(index); // logs "0", "1", "2" 
}); 

// with Object.keys() 

Object.keys(obj).forEach(function (key) { 
    //obj[key] is the property value 
    console.log(obj[key]); // logs "3", "5", "7", "hello" 
}); 

trình duyệt tương thích:
Đối với những người sử dụng cho ... của vòng trong kịch bản nội dung (tức là không phải là một add-on), đây là những compatibility tables from MDN như của 2014/11/02:

Desktop browser compatibility
Mobile browser compatibility
1. Chrome 29–37: Tính năng vòng lặp ... có sẵn sau một tùy chọn. Trong chrome: // flags, kích hoạt mục “Enable JavaScript Thử nghiệm”.

+0

Câu trả lời rất hữu ích, tôi không biết nó đã hạ cánh trong FF13 – Noitidart

1

Đây là tính năng EcmaScript 6 không ổn định hoặc được hỗ trợ bởi tất cả các trình duyệt hiện đại. Bạn cần phải chờ cho nó được ổn định hoặc bạn có thể sử dụng một transpiler như Traceur sẽ chuyển đổi mã ES6 của bạn thành ES5.

+0

Bạn có ý nghĩa gì bởi "không ổn định"? Ngoài ra, một transcoder là cái gì khác, có lẽ bạn đang tìm kiếm transpiler từ. –

+0

Anh ta có thể sử dụng 'tab var trong tab' để hỗ trợ pre-es6 không? – Noitidart

+0

bằng cách sử dụng 'tab var trong tab' hoặc nói cách khác là ... trong cấu trúc được hỗ trợ trong tất cả các trình duyệt. bạn có thể sử dụng an toàn. bởi "không ổn định" Tôi có nghĩa là tính năng được thêm vào trong một số trình duyệt hoặc một số phiên bản của một số trình duyệt nhưng tin tưởng nó hỗ trợ có thể không phải là một ý tưởng tốt cho bây giờ. – ozantunca

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