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下获取div中的数据的原理分析
Apr 07 Javascript
中文路径导致unitpngfix.js不正常的解决方法
Jun 26 Javascript
JS实现的数组全排列输出算法
Mar 19 Javascript
浅析JavaScript中的事件机制
Jun 04 Javascript
js带前后翻页的图片切换效果代码分享
Sep 08 Javascript
JavaScript事件学习小结(一)事件流
Jun 09 Javascript
JavaScript动态数量的文件上传控件
Nov 18 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
Feb 14 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
Jul 05 Javascript
JavaScript解析机制与闭包原理实例详解
Mar 08 Javascript
vue项目从node8.x升级到12.x后的问题解决
Oct 25 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
Nov 09 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
php中对2个数组相加的函数
2011/06/24 PHP
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
PHP生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
2014/07/28 PHP
PHP实现对图片的反色处理功能【测试可用】
2018/02/01 PHP
php日志函数error_log用法实例分析
2019/09/23 PHP
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
Jquery实现视频播放页面的关灯开灯效果
2013/05/27 Javascript
仿百度的关键词匹配搜索示例
2013/09/25 Javascript
javascript如何判断输入的url是否正确
2014/04/11 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
论Bootstrap3和Foundation5网格系统的异同
2016/05/16 Javascript
微信小程序 input输入及动态设置按钮的实现
2017/10/27 Javascript
微信小程序如何调用json数据接口并解析
2019/06/29 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
[45:06]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第二场 11.28
2020/12/02 DOTA
Python获取网页上图片下载地址的方法
2015/03/11 Python
使用Python编写一个在Linux下实现截图分享的脚本的教程
2015/04/24 Python
django基础之数据库操作方法(详解)
2017/05/24 Python
python-pyinstaller、打包后获取路径的实例
2019/06/10 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
keras 多gpu并行运行案例
2020/06/10 Python
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
求职信模版
2013/11/30 职场文书
求职信的最佳写作思路
2014/02/01 职场文书
大跃进口号
2014/06/16 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
俞敏洪一分钟演讲稿
2014/08/26 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
合作合同协议书
2016/03/21 职场文书