hasOwnProperty自我理解

暂时不考虑ES6中symbol,hasOwnProperty()方法返回的是一个对象上是否包含一个指定属性,如果含有则返回true,如果没有则返回false。
 
 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。这一特性尝尝用来检测一个对象上是否包含自身拥有的属性,并且不是从原型链上继承而来的。
如:
o = new Object();
o.prop = 'exists';

function changeO() {
  o.newprop = o.prop;
  delete o.prop;
}

o.hasOwnProperty('prop');   // 返回 true
changeO();
o.hasOwnProperty('prop');   // 返回 false
来源: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

  

但有时候会出现这样的情况,自己封装的对象中包含同名的hasOwnProperty方法,这时候如果调用的话会直接使用自己封装的方法,为了避免这样的情况发生,使用下列的方式来避免这种情况:
 
var foo = {
    hasOwnProperty: function() {
        return false;
    },
    bar: 'Here be dragons'
};

foo.hasOwnProperty('bar'); // 始终返回 false

// 如果担心这种情况,可以直接使用原型链上真正的 hasOwnProperty 方法
({}).hasOwnProperty.call(foo, 'bar'); // true

// 也可以使用 Object 原型上的 hasOwnProperty 属性
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

  

常用的使用方式为:
for (var i in man) {
   if (man.hasOwnProperty(i)) { // 过滤
      console.log(i, ":", man[i]);
   }
}

 



posted @ 2018-05-09 18:28  佳明兄  阅读(607)  评论(0)    收藏  举报

内容仅为参考使用,不保证内容的正确性,通过使用本博客内容随之而来的风险与作者无关。内容如有侵权,请通知删除!