for in
for-in循环用于遍历一个对象的所有可枚举属性,包括其原型链上的属性。
javascript
const obj = { a: 1, b: 2 };
for (const key in obj) {
if (obj.hasOwnProperty(key)) { // 检查属性是否为obj自身的属性,而不是原型链上的属性
console.log(key + ' = ' + obj[key]);
}
}- 遍历属性:
for-in循环遍历对象的所有可枚举属性,包括继承的属性。 - 属性顺序:按照属性创建的顺序进行遍历。
- 非数组:
for-in不适用于数组,因为数组索引也是属性,会遍历所有索引。 - 性能:对于对象属性的遍历,
for-in可能不如for-of高效
for of
for-of循环用于遍历可迭代对象(如数组、字符串、Map、Set等)的值。
javascript
const arr = [3, 5, 7];
for (const value of arr) {
console.log(value);
}区别
for-in用于遍历对象的属性,包括继承的属性。for-of用于遍历可迭代对象的值,如数组、字符串、Map和Set。for-of通常比for-in更适合遍历数组和字符串,因为它遵循迭代器协议,且性能更好。for-in循环中,如果需要排除对象的原型链属性,可以使用hasOwnProperty方法进行检查。