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