hasOwnProperty(prop)
从字面上理解,就是检测是否有属于自己私有的属性,而不是公共的。
所以这个方法可以用来检测一个对象是否含有特定的自身属性,该方法会忽略掉那些从原型链上继承到的属性。
例如:
var car=new Object();
car.speed=10;
alert(car.hasOwnProperty('speed')); //弹出true
delete car.speed;
alert(car.hasOwnProperty('speed')); //弹出false
测试该方法对于自身属性和继承属性的区别:
var car=new Object();
car.speed=10;
//toString()属于Object对象,是原型方法
//hasOwnProperty()属于Object对象,也是原型方法
//所有继承于Object的都会有以上两个方法
alert(car.hasOwnProperty('speed')); //true
alert(car.hasOwnProperty('toString')); //false
alert(car.hasOwnProperty('hasOwnProperty')); //false
可看出该方法会忽略掉继承属性。
遍历一个对象的自身和继承属性属性:
function Car(){}
Car.prototype.speed=1000;
var car=new Car();
car.name="Ford";
car.price=10000;
for(var i in car){
console.log(i+"---->"+car[i]);
}
name---->Ford
price---->10000
speed---->1000
遍历一个对象的自身属性(忽略掉继承属性):
function Car(){}
Car.prototype.speed=1000;
var car=new Car();
car.name="Ford";
car.price=10000;
for(var i in car){
if(car.hasOwnProperty(i)){
console.log(i+"---->"+car[i]);
}
}
name---->Ford
price---->10000
注意!JavaScript并没有对hasOwnProperty属性名施加保护,因此可能存在有些对象使用hasOwnProperty作为自定义的属性名,于是在调用该方法时出现意想不到的错误。所以,保险起见,可以直接使用Object原型链上的hasOwnProperty属性。
例如:
var car={
speed:1000,
hasOwnProperty:function(args){
console.log("自定义的hasOwnProperty属性"+args);
}
}
alert(car.hasOwnProperty("speed")); //弹出undefined
alert(car.hasOwnProperty("hasOwnProperty")); //弹出undefined
alert(car.hasOwnProperty); //弹出自定义的函数字符串表示形式
直接使用Object原型链上的hasOwnProperty属性:
var car={
speed:1000,
hasOwnProperty:function(args){
console.log("自定义的hasOwnProperty属性"+args);
}
}
alert(car.hasOwnProperty("speed")); //弹出undefined
alert(Object.prototype.hasOwnProperty.call(car,'speed')); //弹出true