资讯专栏INFORMATION COLUMN

细说 Javascript 对象篇(三) : hasOwnProperty

elva / 1172人阅读

摘要:方法是中唯一一个处理对象属性而不会往上遍历原型链的。在这里,只有能给出正确答案,这在遍历一个对象的属性时是非常必要的。这里还要提醒下,当我们使用来遍历对象时,使用将会很好地避免来自原型对象扩展所带来的困扰。

判断一个属性是定义在对象本身而不是继承自原型链,我们需要使用从 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 将会很好地避免来自原型对象扩展所带来的困扰。

参考

http://bonsaiden.github.io/JavaScript-Garden/#object.hasownproperty

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78051.html

相关文章

  • 细说 Javascript 对象(四) : for in 循环

    摘要:第二是,由于会遍历整个原型链,所以当原型链过长时,会对性能造成影响。总结建议养成过滤属性的好习惯,不要对运行环境做任何假设,也无论原生的原型对象是否被扩展。 如同 in 运算符一样,使用 for in 循环遍历对象属性时,也将往上遍历整个原型链。 // Poisoning Object.prototype Object.prototype.bar = 1; var foo = {m...

    Kross 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    李昌杰 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    Lyux 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    AaronYuan 评论0 收藏0
  • 细说 Javascript 对象(一) : 对象的使用和属性

    摘要:中的一切都可以视为对象,除了两个特例和。上例中的第三个情形已说明删除对象的属性删除属性的唯一方法是使用,将属性值设置为或只是移除了与属性相关的值,并没有真正删除属性本身。命名对象的属性对象的属性可以用普通字符或字符串来命名。 Javascript 中的一切都可以视为对象,除了两个特例:null 和 undefined。 false.toString(); // false [1, 2...

    codecook 评论0 收藏0

发表评论

0条评论

elva

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<