随笔 - 750  文章 - 1  评论 - 107  阅读 - 34万

【转】[JavaScript] for...in 语法

转自:kimi.ai

在 JavaScript 中,for...in 是一种用于遍历对象属性的循环语句。它会枚举出对象的所有可枚举属性,包括继承的属性(通过原型链继承的属性)。不过,它并不适用于数组的遍历,因为数组的索引会被当作属性名,可能会导致混乱。

基本语法

JavaScript复制
for (variable in object) {
    // 对每个属性进行操作
}

示例

1. 遍历对象的属性

JavaScript复制
const person = {
    name: "Alice",
    age: 25,
    city: "New York"
};

for (let key in person) {
    console.log(key + ": " + person[key]);
}
输出:
复制
name: Alice
age: 25
city: New York

2. 区分对象自身的属性和继承的属性

如果只想遍历对象自身的属性,可以使用 Object.hasOwnProperty() 方法:
JavaScript复制
const person = {
    name: "Alice",
    age: 25
};

Object.prototype.country = "USA"; // 添加一个继承的属性

for (let key in person) {
    if (person.hasOwnProperty(key)) {
        console.log(key + ": " + person[key]);
    }
}
输出:
复制
name: Alice
age: 25

3. 不适合用于数组

虽然 for...in 可以遍历数组的索引,但它会跳过被删除的元素,并且会遍历数组原型链上的属性,因此通常不推荐用于数组。对于数组,推荐使用 for...of 或传统的 for 循环。
JavaScript复制
const arr = [10, 20, 30];
for (let index in arr) {
    console.log(index); // 输出索引,而不是值
}
输出:
复制
0
1
2

注意事项

  1. 继承属性:for...in 会枚举出对象的继承属性,如果只想遍历对象自身的属性,需要结合 hasOwnProperty() 方法。
  2. 数组遍历:不推荐用 for...in 遍历数组,因为可能会导致意外行为。推荐使用 for...ofArray.prototype.forEach()
  3. 顺序问题:for...in 的属性遍历顺序是不确定的,尤其是对于对象的属性。

替代方案

  • for...of:用于遍历数组、字符串、Map、Set 等可迭代对象。
  • Array.prototype.forEach():专门用于数组的遍历。
posted on   z5337  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示