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 相关文章推荐
jquery 实现密码框的显示与隐藏示例代码
Sep 18 Javascript
javascript编写实用的省市选择器
Feb 12 Javascript
javascript实现五星评分功能
Nov 10 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
Apr 28 Javascript
学JavaScript七大注意事项【必看】
May 04 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
Aug 01 Javascript
总结js中的一些兼容性易错的问题
Dec 18 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
Jan 24 Javascript
JS设计模式之命令模式概念与用法分析
Feb 06 Javascript
webstorm+vue初始化项目的方法
Oct 18 Javascript
Javascript数组方法reduce的妙用之处分享
Jun 10 Javascript
ES6 Object属性新的写法实例小结
Jun 25 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
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
php+mysql实现无限级分类
2015/11/11 PHP
PHP实现验证码校验功能
2017/11/16 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
简单的php购物车代码
2020/06/05 PHP
用js实现手把手教你月入万刀(转贴)
2007/11/07 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
jQuery+ajax实现用户登录验证
2020/09/13 jQuery
vue项目中js-cookie的使用存储token操作
2020/11/13 Javascript
详解Python编程中基本的数学计算使用
2016/02/04 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
python如何为创建大量实例节省内存
2018/03/20 Python
用pycharm开发django项目示例代码
2018/10/24 Python
用Python实现读写锁的示例代码
2018/11/05 Python
详解Python正则表达式re模块
2019/03/19 Python
Pandas时间序列基础详解(转换,索引,切片)
2020/02/26 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
2020/03/09 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
Python用SSH连接到网络设备
2021/02/18 Python
阿迪达斯墨西哥官方网站:adidas墨西哥
2017/11/03 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
护理个人求职信范文
2014/01/08 职场文书
国家励志奖学金获奖感言
2014/01/09 职场文书
应届中专生自荐书范文
2014/02/13 职场文书
多媒体专业自我鉴定
2014/02/28 职场文书
《水上飞机》教学反思
2016/02/20 职场文书
解决linux下redis数据库overcommit_memory问题
2022/02/24 Redis
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android