关于for in 循环会遍历原型链上的属性的问题
for in可遍历原型链上扩展的属性,Object.keys() 只遍历自身属性
1.使用 for in 循环遍历对象的属性时,原型链上的所有属性都将被访问:
Object.prototype.say="cgl"; // 修改Object.prototype
var person ={ age: 18 };
for (var key in person) {
console.log(key, person[key]);//这里用person.key得不到对象key的值,用person[key] 或者 eval("person."+key);
} //结果: age 18
say cgl
2.只遍历对象自身的属性,而不遍历继承于原型链上的属性,使用hasOwnProperty 方法过滤一下。
复制代码
Object.prototype.say=“gwl”;
var person ={
age: 18
};
for (var key in person) {
if(person.hasOwnProperty(key)){
console.log(key, eval(“person.”+key));
}
} //结果:age 18
本文探讨了JavaScript中for...in循环与Object.keys()方法的区别,详细解释了for...in循环会遍历对象原型链上的属性,而Object.keys()仅返回对象自身的可枚举属性。并通过实例演示如何使用hasOwnProperty方法来过滤出对象自身的属性。
3833

被折叠的 条评论
为什么被折叠?



