Để thêm cách sử dụng của ES2015 Reflect.ownKeys(obj)
và cũng lặp lại các thuộc tính thông qua một trình vòng lặp.
Ví dụ:
let obj = { a: 'Carrot', b: 'Potato', Car: { doors: 4 } };
có thể được lặp đi lặp lại bởi
// logs each key
Reflect.ownKeys(obj).forEach(key => console.log(key));
Nếu bạn muốn lặp lại trực tiếp các giá trị của các khóa của một đối tượng, bạn có thể định nghĩa một iterator
, giống như các trình lặp mặc định của JavaScipts cho các chuỗi, mảng, mảng được gõ, Map và Set.
JS sẽ cố gắng lặp lại thông qua thuộc tính iterator mặc định, phải được định nghĩa là Symbol.iterator
.
Nếu bạn muốn có thể lặp lại trên tất cả các đối tượng, bạn có thể thêm nó làm nguyên mẫu của Object:
Object.prototype[Symbol.iterator] = function*() {
for(p of Reflect.ownKeys(this)){ yield this[p]; }
}
Điều này sẽ cho phép bạn lặp lại các giá trị của một đối tượng với ... vòng lặp, ví dụ:
for(val of obj) { console.log('Value is:' + val ) }
Thận trọng : Khi viết câu trả lời này (tháng 6 năm 2018) tất cả các trình duyệt khác, nhưng IE, hỗ trợ trình tạo và for...of
lặp quaSymbol.iterator
if (typeof(obj[propt]) === 'object') {
/ * Làm lại * /}