JavaScript 檢測枚舉屬性
■知識點
在大多數(shù)情況下,in運算符是探測對象中屬性是否存在的最好途徑,然而在某些情況下,可能希望僅當(dāng)一個屬性是自有屬性時才檢查其是否存在。in運算符會檢查私有屬性和原型屬性,所以不得不選擇 hasOwnProperty()方法。
■實例設(shè)計
for/in語句可以用來遍歷一個對象中的所有屬性名,該枚舉過程將會列出所有的屬性,包括原型屬性和私有屬性。很多情況下需要過濾掉一些不想要的值,如方法或原型屬性。最為常用的過濾器是hasOwnPropertyO方法,或者使用typeof運算符進(jìn)行排除。
for (var name in person) {
if (typeof person[name] != 'function') //排除所有方法
console.log(name+1:'+ person[name]
}
使用for/in語句枚舉,屬性名出現(xiàn)的順序是不確定的,最好的辦法就是完全避免使用for/iii語句,而是創(chuàng)建一個數(shù)組,在其中以正確的順序包含屬性名。通過使用for語句,可以不用擔(dān)心可能出現(xiàn)原型屬性,并且按正確的順序取得它們的值。
var properties = ['sayName', 'first-name', 'last-name']; //使用數(shù)組定義枚舉順序
for (var i = 0 ; i < properties.length; i += 1) {
console.log(properties[i]+':'+ person[properties[i]] );
}
對于JavaScript對象來說,用戶可以使用for/in語句遍歷一個對象“可枚舉”的屬性,但并不是所有對象屬性都可以枚舉,只有用戶自定義的私有屬性和原型屬性才允許枚舉。
■小結(jié)
為了判定指定私有屬性是否允許枚舉,Object對象定義了 propertyIsEnumerable()方法。該方法的返回值為true,則說明指定的私有屬性可以枚舉,否則是不允許枚舉的。
console.log(o.propertylsEnumerable("a")); //返回值為true,說明可以枚舉
console.log(o.propertylsEnumerable("b")); //返回值為true,說明可以枚舉
console.log(o.propertylsEnumerable("c")); //返回值為false,說明可以不枚舉
console.log(o.propertylsEnumerable("d")); //返回值為false,說明可以不枚舉
var o = F;
console.log(o.propertylsEnumerable(ndn)); //返回值為true,說明可以枚舉
點擊加載更多評論>>