【快速排雷】JS判断对象是否包含某个元素

今日排雷:js判断对象是否包含某个元素

话不多说,上代码 ~

let data = {
    a:111,
    b:0,
    c:undefined,
    d:null,
    e:'',
    f:NaN,
    g:-0
}

if(data['a']){ console.log('data内包含a元素')}  //data内包含a元素
if(data['b']){ console.log('data内包含b元素')} 
if(data['c']){ console.log('data内包含c元素')}
if(data['d']){ console.log('data内包含d元素')}
if(data['e']){ console.log('data内包含e元素')}
if(data['f']){ console.log('data内包含f元素')} 
if(data['g']){ console.log('data内包含g元素')} 
if(data['h']){ console.log('data内包含h元素')}

当判断data中是否包含指定元素时,只有a可以照常执行if代码块中的内容。

其原理: 在Js中当if语句中的表达式不是Bool类型时,会将其强制转换成Bool类型。其中 0、undefined、null、’’(空字符串)、NaN 在强制转换成Bool类型时,其值为false。因此,当出现以上状况时,无法准确判断对象内是否某个元素。 

经修改

let data = {
    a:111,
    b:0,
    c:undefined,
    d:null,
    e:'',
    f:NaN,
    g:-0
}

if(data.hasOwnProperty('a')){ console.log('data内包含a元素')}  //data内包含a元素
if(data.hasOwnProperty('b')){ console.log('data内包含b元素')}  //data内包含b元素
if(data.hasOwnProperty('c')){ console.log('data内包含c元素')}  //data内包含c元素
if(data.hasOwnProperty('d')){ console.log('data内包含d元素')}  //data内包含d元素
if(data.hasOwnProperty('e')){ console.log('data内包含e元素')}  //data内包含e元素
if(data.hasOwnProperty('f')){ console.log('data内包含f元素')}  //data内包含f元素
if(data.hasOwnProperty('g')){ console.log('data内包含g元素')}  //data内包含g元素
if(data.hasOwnProperty('h')){ console.log('data内包含h元素')}  

所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和 in运算符不同,该方法会忽略掉那些从原型链上继承到的属性。

hasOwnProperty()方法会返回一个布尔值,即:对象中是否具有指定的属性。所以不论对象属性的值为null还是undefined,都会返回true。 

猜你喜欢

转载自blog.csdn.net/qq_39078783/article/details/126931331