javascript如何判断对象属性是否存在

本文介绍了 javascript如何判断对象属性是否存在,结合实际案例进行介绍,in操作符,Reflect.has()函数判断属性是否存在,hasOwnProperty方法判断属性是否存在

in 操作符

JavaScript的in操作符可以用来判断一个属性是否属于一个对象,也可以用来变量一个对象的属性

实例

> 'id' in {id: '123'}
true
> 'id' in {}
false

但是因为in会判断继承过来的属性!

> 'toString' in {}
true

那是因为{}继承了方法Object.prototype.toString()

Reflect.has()

Reflect是在ES2015新增的一个内置对象,提供了与Javascript对象交互的方法。判断一个对象是否存在某个属性,和 in 运算符] 的功能完全相同。

用法:Reflect.has(obj, propName)

Reflect.has({id:"123"}, "id"); // true
Reflect.has({age:"45"}, "name"); // false

hasOwnProperty

hasOwnProperty这个方法可以用来检测一个对象是否含有特定的自身属性,即是用来判断一个属性是定义在对象本身而不是继承自原型链的,

o = new Object();
o.age = '50';
o.hasOwnProperty('age');             // 返回 true
o.hasOwnProperty('toString');         // 返回 false
o.hasOwnProperty('hasOwnProperty');   // 返回 false

Object.prototype.hasOwnProperty()

用法:Object.prototype.hasOwnProperty.call(obj, propName);,接受两个参数。请注意我们这里用到了call。改变this的指向。

Object.prototype.hasOwnProperty除了支持hasOwnProperty的相同用法,同时还解决了hasOwnProperty的两个缺点。

o={hasOwnProperty:"50"}
Object.prototype.hasOwnProperty.call.hasOwnProperty(o,'age'); // 返回false

ES13(ES2022)Object.hasOwn()

Object.hasOwn(),目前来看就是替代Object.prototype.hasOwnProperty.call()。

如果用Object.prototype.hasOwnProperty.call() 来封装的话,代码如下:

function hasOwn(obj, propName) {
  return Object.prototype.hasOwnProperty.call(obj, propName);
}

//调用
Object.hasOwn({name: '老王'}, 'name')  // true
Object.hasOwn({}, 'name')               //false
Object.hasOwn({}, 'toString')             //false
Object.hasOwn(Object.create(null), 'name')     //false
Object.hasOwn({hasOwnProperty: 'yes'}, 'name')  //false
Object.hasOwn({hasOwn: 'yes'}, 'name')       //false
上一篇 下一篇


推荐文章

评论
说点什么吧?

发表评论

取消回复
  最新文章