hasOwnProperty

通俗来说:hasOwnProperty用来判断一个属性是对象本身具有,还是原型链上所有,true就是本身所有


为了判断一个对象是否包含自定义属性而不是原型链上的属性, 我们需要使用继承自Object.prototypehasOwnProperty 方法。

注意: 通过判断一个属性是否 undefined不够的。 因为一个属性可能确实存在,只不过它的值被设置为undefined

hasOwnProperty 是JavaScript中唯一一个处理属性但是不需要查找原型链的方法。


<span style="font-size:18px;color:#000099;">
// 修改Object.prototype
Object.prototype.bar = 1; 
var foo = {goo: undefined};
 
foo.bar; // 1
'bar' in foo; // true
 
foo.hasOwnProperty('bar'); // false
foo.hasOwnProperty('goo'); // true

</span>

只有 hasOwnProperty 可以给出正确和期望的结果,这在遍历对象的属性时会很有用。 没有其它方法可以用来排除原型链上的属性,而不是定义在对象自身上的属性。

hasOwnProperty 作为属性(hasOwnProperty as a property)

JavaScript 不会保护 hasOwnProperty 被非法占用,因此如果一个对象碰巧存在这个属性, 就需要使用外部hasOwnProperty 函数来获取正确的结果。

<span style="color:#000099;">var foo = {
    hasOwnProperty: function() {
        return false;
    },
    bar: 'Here be dragons'
};
 
foo.hasOwnProperty('bar'); // 总是返回 false
 
// 使用其它对象的 hasOwnProperty,并将其上下为设置为foo
{}.hasOwnProperty.call(foo, 'bar'); // true</span>

结论(In conclusion)

当检查对象上某个属性是否存在时,hasOwnProperty唯一可用的方法。 同时在使用 for in loop 遍历对象时,推荐总是使用 hasOwnProperty 方法, 这将会避免原型对象扩展带来的干扰。

另补充:

var cat = new Object;

cat.prototype.toString  判断cat类型

cat.prototype.toString是对象cat 原型object上面的属性,不能被删除



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值