位置:首頁(yè) > 軟件操作教程 > 編程開發(fā) > JavaScript > 問題詳情

JavaScript 檢測(cè)枚舉屬性

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-11-25

■知識(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ō)明可以枚舉

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部