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


Posted in Javascript onFebruary 05, 2021

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 相关文章推荐
JQuery 表单中textarea字数限制实现代码
Dec 07 Javascript
js实现图片从左往右渐变切换效果的方法
Feb 06 Javascript
在Node.js应用中使用Redis的方法简介
Jun 24 Javascript
js实现仿Discuz文本框弹出层效果
Aug 13 Javascript
js限制文本框的输入内容代码分享(3类)
Aug 20 Javascript
JavaScript实现一个带AI的井字棋游戏源码
May 21 Javascript
vue中如何让子组件修改父组件数据
Jun 14 Javascript
微信小程序实现下拉菜单切换效果
Mar 30 Javascript
Javascript读取上传文件内容/类型/字节数
Apr 30 Javascript
vue-cli3.X快速创建项目的方法步骤
Nov 14 Javascript
node.js中path路径模块的使用方法实例分析
Feb 13 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
Mar 05 Javascript
关于element的表单组件整理笔记
Feb 05 #Javascript
详解JavaScript中的this指向问题
Feb 05 #Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
Feb 05 #Javascript
详解javascript脚本何时会被执行
Feb 05 #Javascript
前端如何实现动画过渡效果
Feb 05 #Javascript
原生js拖拽功能制作滑动条实例代码
Feb 05 #Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
Feb 04 #jQuery
You might like
提取HTML标签
2006/10/09 PHP
浅析php与数据库代码开发规范
2013/08/08 PHP
php中chdir()函数用法实例
2014/11/13 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
js自定义方法通过隐藏iframe实现文件下载
2013/02/21 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
JavaScript中双叹号!!作用示例介绍
2014/09/21 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
微信公众号 客服接口的开发实例详解
2016/09/28 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
2020/12/30 Vue.js
[01:13]这,就是刀塔
2014/07/16 DOTA
[01:00:59]VP VS VG Supermajor小组赛胜者组第二轮 BO3第二场 6.2
2018/06/03 DOTA
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
工作分析计划书
2014/04/30 职场文书
商务专员岗位职责范本
2014/06/29 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
公证委托书格式
2014/09/13 职场文书
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
2014年收银工作总结
2014/11/13 职场文书
刑事附带民事上诉状
2015/05/23 职场文书
详解Vue的列表渲染
2021/11/20 Vue.js
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL