js属性对象的hasOwnProperty方法的使用

 更新时间:2021年02月05日 10:29:17   作者:weiqinl  
这篇文章主要介绍了js属性对象的hasOwnProperty方法的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Object的hasOwnProperty()方法返回一个布尔值,判断对象是否包含特定的自身(非继承)属性。

判断自身属性是否存在

var o = new Object();
o.prop = 'exists';

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

o.hasOwnProperty('prop'); // true
changeO();
o.hasOwnProperty('prop'); // false

判断自身属性与继承属性

function foo() {
 this.name = 'foo'
 this.sayHi = function () {
  console.log('Say Hi')
 }
}

foo.prototype.sayGoodBy = function () {
 console.log('Say Good By')
}

let myPro = new foo()

console.log(myPro.name) // foo
console.log(myPro.hasOwnProperty('name')) // true
console.log(myPro.hasOwnProperty('toString')) // false
console.log(myPro.hasOwnProperty('hasOwnProperty')) // fasle
console.log(myPro.hasOwnProperty('sayHi')) // true
console.log(myPro.hasOwnProperty('sayGoodBy')) // false
console.log('sayGoodBy' in myPro) // true

遍历一个对象的所有自身属性

在看开源项目的过程中,经常会看到类似如下的源码。for...in循环对象的所有枚举属性,然后再使用hasOwnProperty()方法来忽略继承属性。

var buz = {
  fog: 'stack'
};

for (var name in buz) {
  if (buz.hasOwnProperty(name)) {
    alert("this is fog (" + name + ") for sure. Value: " + buz[name]);
  }
  else {
    alert(name); // toString or something else
  }
}

注意 hasOwnProperty 作为属性名

JavaScript 并没有保护 hasOwnProperty 属性名,因此,可能存在于一个包含此属性名的对象,有必要使用一个可扩展的hasOwnProperty方法来获取正确的结果:

var foo = {
  hasOwnProperty: function() {
    return false;
  },
  bar: 'Here be dragons'
};

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

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

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

参考链接

到此这篇关于js属性对象的hasOwnProperty方法的使用的文章就介绍到这了,更多相关js hasOwnProperty内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析JavaScript原型继承的陷阱

    浅析JavaScript原型继承的陷阱

    JavaScript和其它面向对象语言一样,对象类型采用引用方式。持有对象的变量只是一个地址,而基本类型数据是值。当原型上存储对象时,就可能有一些陷阱
    2013-12-12
  • js返回顶部实例分享

    js返回顶部实例分享

    本文主要分享了js返回顶部的实例代码。可复制直接运行,方便快捷。有很好的参考价值,需要的朋友一起来看下吧
    2016-12-12
  • JS实现图片局部放大或缩小的方法

    JS实现图片局部放大或缩小的方法

    这篇文章主要介绍了JS实现图片局部放大或缩小的方法,涉及javascript事件响应及页面元素动态操作相关技巧,需要的朋友可以参考下
    2016-08-08
  • JavaScript中保留小数点后N位方法总结

    JavaScript中保留小数点后N位方法总结

    这篇文章主要为大家详细介绍了JavaScript中保留小数点后N位的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-06-06
  • javascript实现的字符串转换成数组操作示例

    javascript实现的字符串转换成数组操作示例

    这篇文章主要介绍了javascript实现的字符串转换成数组操作,涉及javascript字符串与数组相互转换、以及数组反转相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • js中的new Map的用法示例小结

    js中的new Map的用法示例小结

    这篇文章主要介绍了js中的new Map的用法示例小结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-03-03
  • 利用JS实现页面删除并重新排序功能

    利用JS实现页面删除并重新排序功能

    这篇文章主要介绍了利用JS实现页面删除并重新排序功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • 思维导图插件jsMind的详细使用指南

    思维导图插件jsMind的详细使用指南

    jsMind是一个显示/编辑思维导图的纯的javascript类库,其基于HTML5的帆布进行设计.jsMind以BSD协议开源,这篇文章主要给大家介绍了关于思维导图插件jsMind的详细使用指南,需要的朋友可以参考下
    2024-07-07
  • javascript 10进制和62进制的相互转换

    javascript 10进制和62进制的相互转换

    本节主要介绍了javascript 10进制和62进制的相互转换,需要的朋友可以参考下
    2014-07-07
  • 简述JS中forEach()、map()、every()、some()和filter()的用法

    简述JS中forEach()、map()、every()、some()和filter()的用法

    JS中常常需要对数组进行遍历、迭代操作,而我们常用的就是for语句对数组进行迭代,下面这篇文章主要给大家介绍了关于JS中forEach()、map()、every()、some()和filter()的用法,需要的朋友可以参考下
    2022-05-05

最新评论