JavaScript 判断对象中是否有某属性的常用方法

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

// 创建对象

let test = {name : 'lei'}

// 获取对象的自身的属性

test.name   //"lei"

test["name"]   //"lei"

 

// 获取不存在的属性

test.age    //undefined

 

// 获取原型上的属性

test["toString"//toString() { [native code] }

 

// 新增一个值为undefined的属性

test.un = undefined

 

test.un    //undefined 不能用在属性值存在,但可能为 undefined的场景

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

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

二、 in 运算符

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

?

1

2

3

4

'name' in test  //true

'un' in test    //true

'toString' in test //true

'age' in test   //false

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

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

 三、hasOwnProperty()

?

1

2

3

test.hasOwnProperty('name'//true 自身属性

test.hasOwnProperty('age')   //false 不存在

test.hasOwnProperty('toString') //false 原型链上属性

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

总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,有几种方法可以判断一个对象属性是否为空。 第一种方法是使用JSON.stringify()将对象转换为字符串,然后判断该字符串是否为"{}"。如果是空对象,转换后的字符串就是"{}",返回true;否则返回false。例如: ```javascript var data = {}; var isEmpty = (JSON.stringify(data) === "{}"); console.log(isEmpty); // true ``` 第二种方法是使用Object.keys()方法,该方法返回一个由对象的可枚举属性组成的数组。判断返回的数组长度是否为零,如果为零则表示对象属性值为空。例如: ```javascript var data = {}; var keys = Object.keys(data); var isEmpty = (keys.length === 0); console.log(isEmpty); // true ``` 第三种方法是使用for...in循环遍历对象属性,如果循环结束后没有返回false,则表示对象属性值为空。例如: ```javascript var data = {}; var isEmpty = true; for (var key in data) { isEmpty = false; break; } console.log(isEmpty); // true ``` 以上是三种常用方法判断对象属性是否为空。根据具体的需求和使用场景,可以选择适合的方法判断对象属性是否为空。 #### 引用[.reference_title] - *1* *2* [[JS] 如何判断一个对象是否为空](https://blog.csdn.net/qq_36286039/article/details/120326338)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v4^insert_chatgpt"}} ] [.reference_item] - *3* [js判断对象是否为空](https://blog.csdn.net/qq_38709383/article/details/123224833)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值