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 相关文章推荐
json 入门基础教程 推荐
Oct 31 Javascript
JavaScript CSS修改学习第五章 给“上传”添加样式
Feb 19 Javascript
理解Javascript_10_对象模型
Oct 16 Javascript
jQuery学习笔记之Helloworld
Dec 22 Javascript
jquery选择器之基本过滤选择器详解
Jan 27 Javascript
node.js中的http.response.end方法使用说明
Dec 14 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
Jun 20 Javascript
解析Vue2.0双向绑定实现原理
Feb 23 Javascript
基于JS实现限时抢购倒计时间表代码
May 09 Javascript
vue动态绑定class的几种常用方式小结
May 21 Javascript
jQuery zTree树插件的使用教程
Aug 16 jQuery
微信小程序实现购物车代码实例详解
Aug 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
php4的session功能评述(二)
2006/10/09 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
jquery序列化方法实例分析
2015/06/10 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
JS获取屏幕高度的简单实现代码
2016/05/24 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
2016/08/01 Javascript
关于javascript的一些知识以及循环详解
2016/09/12 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
基于js中this和event 的区别(详解)
2017/10/24 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
python虚拟环境 virtualenv的简单使用
2020/01/21 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
ES5 模拟 ES6 的 Symbol 实现私有成员功能示例
2020/05/06 Javascript
使用jQuery实现购物车
2020/10/29 jQuery
[05:13]TI4 中国战队 机场出征!!
2014/07/07 DOTA
[01:20:06]TNC vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python原始字符串(raw strings)用法实例
2014/10/13 Python
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
Python网络编程之TCP套接字简单用法示例
2018/04/09 Python
Python实现购物车程序
2018/04/16 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
2019/08/09 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
2014年社区卫生工作总结
2014/12/18 职场文书
2015年底工作总结范文
2015/05/15 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
基于JavaScript实现省市联动效果
2021/06/22 Javascript
Python+Matplotlib+LaTeX玩转数学公式
2022/02/24 Python