首页 > 代码库 > JavaScript对象篇之hasOwnProperty
JavaScript对象篇之hasOwnProperty
判断一个属性是定义在对象本身而不是继承自原型链,我们需要使用从 Object.prototype
继承而来的 hasOwnProperty
方法。hasOwnProperty
方法是 Javascript
中唯一一个处理对象属性而不会往上遍历原型链的。
// Poisoning 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
在这里,只有 hasOwnProperty
能给出正确答案,这在遍历一个对象的属性时是非常必要的。Javascript
中没有其他方法能判断一个属性是定义在对象本身还是继承自原型链。
hasOwnProperty 作为属性
Javascript
并未将 hasOwnProperty
设为敏感词,这意味着你可以拥有一个命名为 hasOwnProperty
的属性。这个时候你无法再使用本身的 hasOwnProperty
方法来判断属性,所以你需要使用外部的 hasOwnProperty
方法来进行判断。
var foo = { hasOwnProperty: function() { return false; }, bar: ‘Here be dragons‘ }; foo.hasOwnProperty(‘bar‘); // always returns false // Use another Object‘s hasOwnProperty and call it with ‘this‘ set to foo ({}).hasOwnProperty.call(foo, ‘bar‘); // true // It‘s also possible to use hasOwnProperty from the Object // prototype for this purpose Object.prototype.hasOwnProperty.call(foo, ‘bar‘); // true
总结
当判断对象属性存在时,hasOwnProperty
是唯一可以依赖的方法。这里还要提醒下,当我们使用 for in loop
来遍历对象时,使用 hasOwnProperty
将会很好地避免来自原型对象扩展所带来的困扰。
JavaScript对象篇之hasOwnProperty
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。