查询某个对象是否有某个属性的四种方法

下面介绍查询某个对象是否有某个属性的四种方法,以及对可枚举属性和不可枚举属性的补充。

1. 使用对象的hasOwnProperty()方法:

const obj = {
  name:'Gaga',
  age: 18
}

console.log(obj.hasOwnProperty('age')); // true
console.log(obj.hasOwnProperty('gender')); // false
  • 如果对象具有指定属性,则返回true,否则返回false。根据返回值可以判断对象是否具有指定属性。

2. 使用in操作符:

const obj = {
  name:'Gaga',
  age: 18
}

console.log('name' in obj);  // true
console.log('gender' in obj); // false
  • in操作符会检查属性是否存在于对象本身,以及是否存在于原型链上。因此,可能会返回意料之外的结果。

3. 使用Object.keys()方法:

const obj = {
  name:'Gaga',
  age: 18
}
// 使用Object.keys()方法可以获取对象的所有属性
let keys = Object.keys(obj) // [ 'name', 'age' ]
console.log(keys.includes('name')); // true
console.log(keys.includes('gender')); // false
  • Object.keys()方法只返回对象自身可枚举属性的数组,不包括原型链上的属性。
  • 如果想要获取对象的所有属性,包括不可枚举属性,可以使用Object.getOwnPropertyNames()方法。

4. 使用Object.getOwnPropertyNames()方法:

const obj = {
  name:'Gaga',
  age: 18,
  state: true,
  address:'CH'
}
// 使用Object.getOwnPropertyNames()方法获取对象的所有自身属性(包括不可枚举属性)
let propertyNames = Object.getOwnPropertyNames(obj);
console.log(propertyNames); // [ 'name', 'age', 'state', 'address' ]
console.log(propertyNames.includes('name'));  //true
console.log(propertyNames.includes('gender'));  //false
  • Object.getOwnPropertyNames()方法会返回对象的所有自身属性,包括可枚举和不可枚举属性。

补充:

在JavaScript中,对象的属性可以分为可枚举属性和不可枚举属性。可枚举属性是指可以通过for...in循环或Object.keys()方法获取的属性,而不可枚举属性则是指不能通过这些方式获取的属性。
在对象创建时,默认情况下,所有直接添加到对象的属性都是可枚举的。但是,有些属性是不可枚举的,例如通过Object.defineProperty()方法定义的属性,默认是不可枚举的。 不可枚举属性通常用于存储对象的内部信息,而不是用于外部访问。这样可以避免意外修改或删除这些属性,同时不会影响对象的遍历操作。 下面通过代码来演示:

const obj = {
  name:'Gaga',
  age: 18
}

// 使用Object.defineProperty()定义不可枚举属性
Object.defineProperty(obj, 'gender', {
  value: 'female',
  enumerable: false  // 将gender属性设置为不可枚举
});

// 遍历对象的属性
for (let key in obj) {
  console.log(key); // 输出'name'和'age',但不会输出'gender'
}

// 使用Object.keys()获取对象的属性
let keys = Object.keys(obj);
console.log(keys); // 输出['name', 'age']

// 使用Object.getOwnPropertyNames()方法获取对象的所有自身属性(包括不可枚举属性)
let propertyNames = Object.getOwnPropertyNames(obj);
console.log(propertyNames); // 输出[ 'name', 'age', 'gender' ]

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值