比如这个数据
let a={
number:0
}
如果我要判断对象 a 是否存在 number 属性?js 中你可能会这样操作
if(a.number){
console.log (“存在属性了”)
}
事实上他会认定是 false 状态
可以这样
Reflect.has() 方法用于检查一个对象是否拥有某个属性中。
如下:
| 1
2
|
Reflect.has({x: 0}, “x” ); // true
Reflect.has({x: 0}, “y” ); // fals
|
Reflect.has({x: 0}, “toString”``);
- in 操作符
in 运算符用于检查对象是否包含某个属性,如果包含就返回 true,否则返回 false。它的作用和 Reflect.has() 方法相同。
Object.prototype.hasOwnPerporty () 方法
const obj = {p: 1};
console.log(obj.hasOwnProperty( ‘toString’ )); // false
Object.hasOwn () 方法
Object.hasOwn() 方法是 ES2022 新提出的,用于替代 Object.prototype.hasOwnProperty() 的方法。根据 MDN 文档中的介绍:如果指定的对象具有作为其自身属性的指定属性,则 hasOwn() 方法返回 true; 如果该属性是继承的或不存在,则该方法返回 false。
使用方法如下:
| 1
2
3
4
|
const object1 = {prop: ‘exists’ };
console.log(Object.hasOwn(object1, ‘prop’ )); // true
console.log(Object.hasOwn(object1, ‘toString’ )); // false
| 还可以用?. 判断是否存在属性
let a={}
console.log(a.b); // undefined
我们可以和??一起使用
console.log(a.b??“不存在”); // undefined
首先?.作用就是判断这个对象(下的(Object)下的(value)下的(length)是否为null或者undefined,
(如果没有加 ?. ,有的时候会报length是null 的错误,或者说 null length 没有定义,然有了?. 就省去了好多麻烦)
当其中一链为null或者undefined时就返回undefined,这样即使中间缺少一个属性也不会报错
在 JS 中,?? 运算符被称为非空运算符。如果第一个参数不是 null/undefined(译者注:这里只有两个假值,但是 JS 中假值包含:未定义 undefined、空对象 null、数值 0、空数字 NaN、布尔 false,空字符串 ‘’,不要搞混了),将返回第一个参数,否则返回第二个参数