
應用物件與屬性
39
<!DOCTYPE html><html lang="en"><body><script>
var cody = {
age :23,
gender : 'male'
};
for (var key in cody) { // key 是用來表示每一個屬性名稱的變數
// 跳過從原型鏈繼承來的屬性
if(cody.hasOwnProperty(key)) {
console.log(key);
}
}
</script></body></html>
for in 迴圈有一個缺點。它不但會存取執行迴圈的物件的屬性,也會在迴圈中加入物件繼
承來的所有屬性(透過原型鏈)。因此,如果這不是你期望的結果(大部分的情況都是
如此),可以在迴圈中使用一個簡單的 if 陳述式來讓程式只存取物件中的屬性。你可以
使用所有物件都繼承的 hasOwnProperty() 方法來做到這一點。
迴圈存取屬性的順序不一定會按照它們在迴圈之中的定義順序。除此之外,屬性的定義
順序不一定是它們被存取的順序。
只 有 可 被 列 舉 ( e n u m e r a b l e ) 的 屬 性 ( 亦 即 , 對 物 件 屬 性 執 行 迴 圈 時 可 取 得
的)才 會 出現在 f or i n 迴 圈。例 如 ,建構 式的屬 性 是不會 出 現的。 你可以 使 用
propertyIsEnumerable() 方法來檢查哪一些屬性可列舉(http://mzl.la/WHAqL ...