tl; dr
- Trong ECMAScript 5, điều đó là không thể.
- Trong ECMAScript 2015, có thể với
Map
s.
- Trong ECMAScript 2017, nó sẽ có sẵn.
Bản thảo 5:
Không, nó không thể với các đối tượng.
Bạn nên lặp lại với for..in
, hoặc Object.keys
, như thế này
for (var key in dictionary) {
// check if the property/key is defined in the object itself, not in parent
if (dictionary.hasOwnProperty(key)) {
console.log(key, dictionary[key]);
}
}
Lưu ý: Điều if
kiện trên là cần thiết, chỉ khi bạn muốn lặp lại các thuộc tính là dictionary
của riêng đối tượng. Bởi vì for..in
sẽ lặp qua tất cả các thuộc tính vô số được kế thừa.
Hoặc là
Object.keys(dictionary).forEach(function(key) {
console.log(key, dictionary[key]);
});
Bản thảo năm 2015
Trong ECMAScript 2015, bạn có thể sử dụng Map
các đối tượng và lặp lại chúng với Map.prototype.entries
. Trích dẫn ví dụ từ trang đó,
var myMap = new Map();
myMap.set("0", "foo");
myMap.set(1, "bar");
myMap.set({}, "baz");
var mapIter = myMap.entries();
console.log(mapIter.next().value); // ["0", "foo"]
console.log(mapIter.next().value); // [1, "bar"]
console.log(mapIter.next().value); // [Object, "baz"]
Hoặc lặp đi lặp lại với for..of
, như thế này
'use strict';
var myMap = new Map();
myMap.set("0", "foo");
myMap.set(1, "bar");
myMap.set({}, "baz");
for (const entry of myMap.entries()) {
console.log(entry);
}
Đầu ra
[ '0', 'foo' ]
[ 1, 'bar' ]
[ {}, 'baz' ]
Hoặc là
for (const [key, value] of myMap.entries()) {
console.log(key, value);
}
Đầu ra
0 foo
1 bar
{} baz
Bản thảo năm 2017
ECMAScript 2017 sẽ giới thiệu một chức năng mới Object.entries
. Bạn có thể sử dụng điều này để lặp lại đối tượng như bạn muốn.
'use strict';
const object = {'a': 1, 'b': 2, 'c' : 3};
for (const [key, value] of Object.entries(object)) {
console.log(key, value);
}
Đầu ra
a 1
b 2
c 3
for (let [key, value] of Object.entries(obj))
, cần Babel.