js判断对象中是否有某属性常用的方法

207 阅读1分钟

1点(.)或者方括号([])

通过点或者方括号的方法可以获取属性值,如果对象上不存该属性,则会返回undefined. 这里说的不存在是原型链上和自身都不存在,如果原型链上存在,则会返回原型链上的属性值

	let test={name:'wkm}
     test.name //wkm
     // 获取不存在的属性
     test.age    //undefined
     // 获取原型上的属性
    test["toString"]  //toString() { [native code] }
    // 新增一个值为undefined的属性
    test.un = undefined
   test.un    //undefined 不能用在属性值存在,但可能为 undefined的场景

所以可以根据,obj.x!==undefined 的返回值来判断obj是否有x属性。 这种方法是有局限性的,不能用在x的属性值存在但是为undefined的场景。in运算符可以解决这个问题。

in 运算发

如指定属性,在指定对象的原型或者原型链中,则in运算符返回true

	'name' in test  //true
	'un' in test    //true
	'toString' in test //true
	'age' in test   //false

 示例中可以看出,值为undefined的属性也可正常判断。

  这种方式的局限性就是无法区分自身和原型链上的属性,在只需要判断自身属性是否存在时,这种方式就不适用了。这时需要hasOwnProperty()

三、hasOwnProperty()

test.hasOwnProperty('name')  //true 自身属性
test.hasOwnProperty('age')   //false 不存在
test.hasOwnProperty('toString') //false 原型链上属性

可以看到,只有自身存在该属性时,才会返回true。适用于只判断自身属性的场景。

总结

 三种方式各有优缺点,不同的场景使用不同的方式,有时还需要结合使用,比如遍历自身属性的时候,就会把 for ··· in ···和 hasOwnProperty()结合使用。