之前
obj['key'],點"."
1 .出現(xiàn)的bug,如果這個key的值是false,這里就會判斷沒有,或者value是undefined也一樣
2 .可以看到這倆都不行
3 .如果對象上不存在改屬性,則會返回undefined.這種方式可以判斷對象的自由屬性和繼承屬性.如果對象自身沒有檢測的屬性,而原型鏈上有該屬性,就會返回原型鏈上的屬性值
現(xiàn)在 方法1 hasOwnProperty :實例屬性
1 .返回一個布爾值,指示對象自身屬性是否有指定的屬性
2 .原型鏈上的不會被訪問到,和in不同,會忽略到從原型鏈上繼承到的屬性
3 .即使屬性的值是null,undefined,只要屬性存在,hasOwnProperty依舊會返回true
4 .注意:這個方法沒有被保護,也就是說方法可以自定定義一個這樣的方法,來讓他的返回值永遠是true或者false
方法2 in方法 :實例屬性,繼承屬性
1 .!!('work' in obj)
2 .如果指定的屬性在指定的對象或其原型鏈中颠印,則in 運算符返回true
1 .對象的意思就是說,數(shù)組,也是可以用的,但是看例子有異常.傳入數(shù)字的話直接返回false,但是我的數(shù)組里面全是字符串類型
2 .原型鏈的意思就是說會檢查一些方法,比如"PI" in Math 返回true
3 .比如length是數(shù)組的一個屬性,這里可以返回是true
3 .使用delete刪除的屬性返回false
4 .值為undefined的屬性是可以的
方法3 Reflect.has()
1 .和in方法完全一樣,但是第一個參數(shù)不是對象會報錯
2 .這個方法更加形象
3 .原型鏈上的方法同樣可以會返回true
方法4 obj.propertyIsEnummerable()
1 .判斷指定名稱的屬性是否為實例屬性并且是可枚舉的.
2 .
總結(jié)
1 .也就是說,判斷自身屬性的時候用除了in的所有方法,判斷繼承屬性使用in
2 .