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 相关文章推荐
js 金额文本框实现代码
Feb 14 Javascript
jQuery中判断一个元素是否为另一个元素的子元素(或者其本身)
Mar 21 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
Jan 25 Javascript
实现点击列表弹出列表索引的两种方式
Mar 08 Javascript
js加强的经典分页实例
Mar 15 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
Oct 20 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
Dec 03 Javascript
js 获取元素下面所有li的两种方法
Apr 14 Javascript
JavaScript实现公历转农历功能示例
Feb 13 Javascript
vue cli构建的项目中请求代理与项目打包问题
Feb 26 Javascript
node实现分片下载的示例代码
Oct 17 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
Dec 17 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
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
2012/01/21 Javascript
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
2015/11/23 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
2016/05/05 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
详解VUE中v-bind的基本用法
2017/07/13 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
Vue仿今日头条实例详解
2018/02/06 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
security.js实现的RSA加密功能示例
2018/06/06 Javascript
微信小程序实现下拉菜单切换效果
2020/03/30 Javascript
了解javascript中let和var及const关键字的区别
2019/05/24 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
Python获取电脑硬件信息及状态的实现方法
2014/08/29 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
python opencv 图像拼接的实现方法
2019/06/27 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
python颜色随机生成器的实例代码
2020/01/10 Python
python实现字符串和数字拼接
2020/03/02 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
2020/03/06 Python
留学自荐信的技巧
2013/10/17 职场文书
销售行政专员职责
2014/01/03 职场文书
区三好学生主要事迹
2014/01/30 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
外联部演讲稿
2014/05/24 职场文书
拔河比赛口号
2014/06/10 职场文书
公证委托书标准格式
2014/09/11 职场文书
推普标语口号大全
2015/12/26 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS