1. .
或[]
const obj = {a:1, b:2, c:3,d:undefined};
obj.d //undefined
obj.e //undefined
obj.toString //? toString() { [native code] }
缺點:不能用在屬性值為 undefined
的場景
2. in
const obj = {a:1, b:2, c:3,d:undefined};
'd' in obj //true
'e' in obj //false
'toString' in obj //true
缺點:無法區(qū)分自身和原型鏈上的屬性
3. Reflect.has
const obj = {a:1, b:2, c:3,d:undefined};
Reflect.has(obj,'d') //true
Reflect.has(obj,'e') //false
Reflect.has(obj,'toString') //true
缺點:無法區(qū)分自身和原型鏈上的屬性产镐,同方法二
4. hasOwnProperty
const obj = {a:1, b:2, c:3,d:undefined};
obj.hasOwnProperty('d') //true
obj.hasOwnProperty('e') //false
obj.hasOwnProperty('toString') //false
缺點:只能判斷自身屬性
總結
- 方法
1
的缺點方法2米碰,3
可以解決娩井,方法2番甩,3
的缺點方法4
可以解決 - 以上方法唆缴,每種都有優(yōu)缺點憎乙,有時可能需要結合使用