判断对象中是否存在某一个属性
正确写法
/**
* 判断对象中是否存在某个属性
* @param {Object} obj 对象
* @param {Sting} key 属性名
*/
function hasProperty(obj,key){
return key in obj;
}
错误写法
function hasProperty(obj,key){
return obj.key !== undefined; //错的离谱
}
function hasProperty(obj,key){
return obj[key] !== undefined; //无法判断对象中有属性的值为undefined的属性
}
如
var obj = {a:undefined}
function hasProperty(obj,key){
return Object.keys(obj).includes(key)
}
//无法获取到使用defineProperty添加的属性
Object.defineProperty(obj,'c',{
enumberable:false,
value: 1
})
function hasProperty(obj,key){
return obj.hasOwnProperty(key) //不能查找到原型链上的数据
}