直接看代码:
const obj = {
a: undefined
};
Object.prototype.b = 'haha';
console.log(obj.hasOwnProperty('a'), obj.hasOwnProperty('b'));
console.log('a' in obj, 'b' in obj);
console.log(obj.a !== undefined, obj.b !== undefined);
/* output:
* true false
* true true
* false true
*/
解释一下这三种方法:
- obj.hasOwnProperties:只能判断在obj自身的属性,obj原型链上的一率false
- 'a' in obj:既可以判断obj自身的属性,又可以判断obj原型链上的属性
- obj.a !== undefined:同上一个,但是缺点是不能判断本身值就为undefined的情况
总结:
- in最万能
- 如果只在乎本身属性用hasOwnProperties
- undefined最简单,绝大部分情况没问题,基本放心用