1️⃣ for…in 循环(最常用)

const json = {
  name: "张三",
  age: 25,
  city: "北京"
};

for (let key in json) {
  console.log(key);           // name, age, city
  console.log(json[key]);     // 张三, 25, 北京
}

2️⃣ Object.keys()(推荐 ✅)

Object.keys(json).forEach(key => {
  console.log(key, json[key]);
});

// 或
Object.keys(json).map(key => {
  console.log(key);
});

3️⃣ Object.entries()(同时获取 key 和 value)

for (let [key, value] of Object.entries(json)) {
  console.log(`${key}: ${value}`);
}

4️⃣ Object.getOwnPropertyNames()(包括不可枚举属性)

Object.getOwnPropertyNames(json).forEach(key => {
  console.log(key);
});

🔄 递归遍历嵌套 JSON

function traverseKeys(obj, prefix = '') {
  for (let key in obj) {
    const fullKey = prefix ? `${prefix}.${key}` : key;
    console.log(fullKey);
    
    if (typeof obj[key] === 'object' && obj[key] !== null) {
      traverseKeys(obj[key], fullKey);  // 递归
    }
  }
}

const nestedJson = {
  user: {
    name: "张三",
    address: {
      city: "北京",
      street: "长安街"
    }
  }
};

traverseKeys(nestedJson);
// 输出: user
//       user.name
//       user.address
//       user.address.city
//       user.address.street

📊 方法对比

方法 遍历原型链 包含 Symbol 推荐场景
for...in 简单遍历
Object.keys() 日常推荐
Object.entries() 需要 key+value
getOwnPropertyNames() 完整属性

💡 推荐使用 Object.keys()Object.entries(),更安全且语义清晰!

更多推荐