for...in duyệt KEY (property name)
Với array, key là index dạng string: "0", "1", "2"... Bao gồm cả custom property.
Ví dụ
<script>
var items = ['Hello', 'World'];
items.custom = "extra";
for (var i in items) {
document.write("Key: " + i + ", Value: " + items[i] + "<br>");
}
// Key: 0, Value: Hello
// Key: 1, Value: World
// Key: custom, Value: extra
</script>
⚠️ VẤN ĐỀ VỚI ARRAY
- Thứ tự không đảm bảo (tùy engine).
- Duyệt cả prototype properties (nếu có).
- Key là string – so sánh số thất bại:
i === 0false (vì "0" !== 0). - Chậm hơn
for/for...of.
Cách đúng duyệt Array
| Cách | Code | Ưu điểm |
|---|---|---|
| for...of (ES6) | for (const v of arr) | Giá trị trực tiếp, thứ tự đúng, hỗ trợ break/continue |
| for truyền thống | for (let i=0; i | Có index, kiểm soát bước nhảy |
| forEach | arr.forEach((v,i)=>{}) | Ngắn, functional (không break) |
| map/filter/reduce | arr.map(...) | Biến đổi, lọc, tính toán |
Khi nào dùng for...in
Chỉ cho plain object (duyệt own properties):
for (const key in obj) {
if (Object.hasOwn(obj, key)) { // ES2022
console.log(key, obj[key]);
}
}