兩種使用方式:
- for..in
- 返回所有能夠通過對象訪問的、可枚舉的屬性,其中包括實例屬性,也包括原型屬性。
- 通過obj.hasOwnProperty(xxx)可以判斷某個屬性是否是實例屬性。
- Object.keys()傳入一個對象作為參數(shù),可以返回僅存在于該對象上的所有可枚舉屬性的字符串?dāng)?shù)組,不包括原型對象上的屬性。
- Object.getOwnPropertyNames(),傳入一個對象作為參數(shù),可以返回所有存在于該實例對象上的屬性名稱,不論是否可枚舉,但不包括原型對象上的屬性。
ES5中,將constructor和prototype的enumerable設(shè)置為false.。
- 返回所有能夠通過對象訪問的、可枚舉的屬性,其中包括實例屬性,也包括原型屬性。
- 單獨使用
- in操作符會在通過對象能夠訪問給定屬性時返回true,無論該實例存在于實例中還是原型中。
- 區(qū)別:obj.hasOwnProperty(),只有在屬性存在于實例中時才返回true,如果只存在于原型對象中,實例中沒有,則會返回false。
- 結(jié)合in和obj.hasOwnProperty()可以找出只存在于原型對象上的屬性:
return !obj.hasOwnProperty( name ) && ( name in obj );,如果總體返回true,則obj.hasOwnProperty( name )返回也是true,則是實例上的屬性,如果總體返回false,說明obj.hasOwnProperty( name )為false,如果此時name in obj為true,則可以確定這是只存在于原型對象上的屬性。