for...in语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性。(遍历数组不推荐使用)
for..in不推荐使用在数组:因为for...in不能保证将以任何特定的顺序返回索引。
//for...in语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性。
let obj = {
a: 1,
b: 2,
c: 3
};
for (let i in obj) (
console.log(i),//a b c
console.log(obj[i])//1 2 3
)
如果你只要考虑对象本身的属性,而不是它的原型,那么执行 hasOwnProperty() 来确定某属性是否是对象本身的属性,返回值是boolean值
//如果你只要考虑对象本身的属性,而不是它的原型,
// 那么执行 hasOwnProperty() 来确定某属性是否是对象本身的属性,返回值是boolean值
let obj = {
a: 1,
b: 2,
c: 3,
__proto__: {
lastName: 'xie'
}
};
Object.prototype.addMsg = 'LM';
for (let i in obj) (
console.log(i),//a b c lastName addMsg
console.log(obj[i])//1 2 3 xie LM
);
//现在你只想遍历obj里面的属性,原型上面的属性不需要
for (let i in obj) {
if (obj.hasOwnProperty(i)) {
console.log(obj[i]);// 1 2 3
}
}
in基本上在开发的时候没有怎么用过
//注意in也可以判断属性是否存在这个对象中,不过in不单单会把自己的认为是自己的,就算是父级的也认为是自己的,
// 所以就打印出来了五个true
let obj = {
a: 1,
b: 2,
c: 3,
__proto__: {
lastName: 'xie'
}
};
Object.prototype.addMsg = 'LM';
for (let i in obj) (
console.log(i in obj)//true true true true true
);
for...of:使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments
对象、DOM NodeList 对象)、后文的 Generator 对象,以及字符串。
const arr = [1,11,22]
for(let i of arr){
console.log("i:",i)
}
ES6的for...of与JavaScript原有的for...in的不同在于:for...of的i循环出来的是键值,而for...in的i循环出来的是键名