1. 直接用.或[]判斷
var test = {name : 'lei'}
test.name //"lei"
test["name"] //"lei"
// 擷取原型上的屬性
test["toString"] //toString() { [native code] }
// 新增一個值為undefined的屬性
test.un = undefined
是以,我們可以根據 Obj.x !== undefined 的傳回值 來判斷Obj是否有x屬性。
這種方式很簡單友善,局限性就是:不能用在x的屬性值存在,但可能為 undefined的場景。 in運算符可以解決這個問題
2. in 運算符
var test = {name : 'lei'}
console.log("in",'un' in test, 'name' in test,'abc' in test);
//in true true false
這種方式的局限性就是無法區分自身和原型鍊上的屬性,在隻需要判斷自身屬性是否存在時,這種方式就不适用了。同時不是所有的浏覽器都支援這個文法,存在相容性問題
3. Reflect.has(obj,name);
Reflect.has方法對應name in obj 中的運算符
var myObject ={foo:1}
//舊寫法
'foo' in myObject ;
// 新寫法
Reflect.has(myObject ,'foo');
如果第一個參數不是對象Rellect.has和in運算符都會報錯
4.hasOwnProperty
test.hasOwnProperty('name') //true 自身屬性
test.hasOwnProperty('age') //false 不存在
test.hasOwnProperty('toString') //false 原型鍊上屬性
可以看到,隻有自身存在該屬性時,才會傳回true。适用于隻判斷自身屬性的場景。