for in

所有开发人员定义的属性都是可枚举的。

for-in

返回所有能够通过对象访问的、可枚举的属性,包括存在于实例中的属性,也包括存在于原型(原型链上所有原型)中的属性。屏蔽了原型中不可枚举属性的实例属性也会返回。

instanceObj.hasOwnProperty(prop)

继承自:Object.prototype.
所以所有对象都有此方法。
只有属性prop存在于对象实例中时,才会返回true。

function Person() {}
Person.prototype = {
    name : "xgs",
    age : "23"
}
var p1 = new Person();
p1.hasOwnProperty("name");//false
p1.name = "zl";
p1.hasOwnProperty("name");//true

结合in和hasOwnProperty

//判断属性是否为原型属性
function hasPrototypeProperty(obj, prop) {
    return !obj.hasOwnProperty(prop) && (prop in obj);//返回true时表明,对象的prop属性是存在于原型上的;返回false时,要么不存在该属性,要么是实例属性
}

你可能感兴趣的:(for in)