JavaScript如何判断对象有某属性


Posted in Javascript onJuly 03, 2020

 判断对象中是否有某属性的常见方式总结,不同的场景要使用不同的方式。

一、点( . )或者方括号( [ ] )

通过点或者方括号可以获取对象的属性值,如果对象上不存在该属性,则会返回undefined。当然,这里的“不存在”指的是对象自身和原型链上都不存在,如果原型链有该属性,则会返回原型链上的属性值。

// 创建对象
let test = {name : 'lei'}
// 获取对象的自身的属性
test.name      //"lei"
test["name"]     //"lei"

// 获取不存在的属性
test.age       //undefined

// 获取原型上的属性
test["toString"]   //toString() { [native code] }// 新增一个值为undefined的属性test.un = undefinedtest.un       //undefined  不能用在属性值存在,但可能为 undefined的场景

 所以,我们可以根据 Obj.x !== undefined 的返回值 来判断Obj是否有x属性。

这种方式很简单方便,局限性就是:不能用在x的属性值存在,但可能为 undefined的场景。 in运算符可以解决这个问题

二、 in 运算符

MDN 上对in运算符的介绍:如果指定的属性在指定的对象或其原型链中,则in 运算符返回true。

'name' in test //true
'un' in test //true
'toString' in test //true
'age' in test //false

 示例中可以看出,值为undefined的属性也可正常判断。

这种方式的局限性就是无法区分自身和原型链上的属性,在只需要判断自身属性是否存在时,这种方式就不适用了。这时需要hasOwnProperty()

三、hasOwnProperty()

test.hasOwnProperty('name') //true 自身属性
test.hasOwnProperty('age') //false 不存在
test.hasOwnProperty('toString') //false 原型链上属性

可以看到,只有自身存在该属性时,才会返回true。适用于只判断自身属性的场景。

四、propertyIsEnumerable()

const object1 = {};
const array1 = [];
object1.property1 = 42;
array1[0] = 42;

console.log(object1.propertyIsEnumerable('property1'));
// expected output: true

console.log(array1.propertyIsEnumerable(0));
// expected output: true

console.log(array1.propertyIsEnumerable('length'));
// expected output: false

propertyIsEnumerable() 方法返回一个布尔值,表示指定的属性是否可枚举。

总结

四种方式各有优缺点,不同的场景使用不同的方式,有时还需要结合使用,比如遍历自身属性的时候,就会把 for ··· in ···和 hasOwnProperty()结合使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript:void(0)是什么意思示例介绍
Nov 17 Javascript
鼠标滑在标题上显示图片的JS代码
Nov 19 Javascript
改变隐藏的input中value的值代码
Dec 30 Javascript
Jquery对象和Dom对象的区别分析
Nov 20 Javascript
javascript二维数组转置实例
Jan 22 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
Oct 14 Javascript
Node.js实现JS文件合并小工具
Feb 02 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
Nov 03 Javascript
基于js中的存储键值对以及注意事项介绍
Mar 30 Javascript
webpack 样式加载的实现原理
Jun 12 Javascript
JS合并两个数组的3种方法详解
Oct 24 Javascript
解决ant Design Search无法输入内容的问题
Oct 29 Javascript
详解element-ui动态限定的日期范围选择器代码片段
Jul 03 #Javascript
JS常见错误(Error)及处理方案详解
Jul 02 #Javascript
vue过滤器实现日期格式化的案例分析
Jul 02 #Javascript
Vue使用预渲染代替SSR的方法
Jul 02 #Javascript
node运行js获得输出的三种方式示例详解
Jul 02 #Javascript
基于小程序请求接口wx.request封装的类axios请求
Jul 02 #Javascript
JS异步宏队列与微队列原理区别详解
Jul 02 #Javascript
You might like
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
2014/11/25 PHP
php实现可用于mysql,mssql,pg数据库操作类
2014/12/13 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
JQuery优缺点分析说明
2010/06/09 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
jquery模拟实现鼠标指针停止运动事件
2016/01/12 Javascript
移动端js图片查看器
2016/11/17 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
React-Native做一个文本输入框组件的实现代码
2017/08/10 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
2017/10/11 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
2016/08/15 Python
Python基础教程之异常详解
2019/01/10 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
python logging模块的使用总结
2019/07/09 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
python可迭代对象去重实例
2020/05/15 Python
基于Python实现粒子滤波效果
2020/12/01 Python
python数据抓取3种方法总结
2021/02/07 Python
Blank NYC官网:夹克、牛仔裤等
2020/12/16 全球购物
会计与审计专业自荐信范文
2014/03/15 职场文书
2014年新生军训方案
2014/05/01 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
乡镇群众路线专项整治方案
2014/11/03 职场文书
世界名著读书笔记
2015/06/25 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
2016年中秋节寄语大全
2015/12/07 职场文书