js检测对象中是否存在某个属性 关系运算符 in 和 Object.prototype.hasOwnProperty() 区别

1. in 运算符

如果指定的属性在指定的对象或其原型链中,则in 运算符返回true。
let obj = {
	a: 1
}

console.log('a' in obj) // true 自身属性
console.log('valueOf' in obj) // true 继承方法

2. hasOwnProperty() 方法

hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。
let obj = {
	a: 1
}

console.log(obj.hasOwnProperty('a')) // true 自身属性

因为 javascript 没有将hasOwnProperty作为一个敏感词,所以我们很有可能将对象的一个属性命名为hasOwnProperty,这样一来就无法再使用对象原型的 hasOwnProperty 方法来判断属性是否是来自原型链。


var foo = {
    hasOwnProperty: function() {
        return false;
    },
    bar: 'Hello'
};
 
foo.hasOwnProperty('bar'); // 始终返回 false

不能使用 该对象.hasOwnProperty 这种方法,怎么来解决这个问题呢?我们需要使用原型链上真正的 hasOwnProperty 方法:

({}).hasOwnProperty.call(obj, 'a'); // true
// 或者:
Object.prototype.hasOwnProperty.call(obj, 'a'); // true

3. . 、[] 判断

let obj = {
	a: 1
}

console.log(obj.a) // true
console.log(obj['a']) // true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值