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

JavaScript 檢測枚舉屬性

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

■知識點

    在大多數(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,說明可以枚舉

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

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