1. 程式人生 > >javaScript遍歷已知物件的屬性值顯示‘undefined’的問題

javaScript遍歷已知物件的屬性值顯示‘undefined’的問題

資料解析遇到到一個小問題,json格式的資料多層巢狀,大概長這樣,事實上結構比這個還複雜(為什麼這樣?我也不知道, 這要問已經不在的服務端的同志…..)
ex:

{
"data":[
    {
        "刑事":[4,0,0,0,0,0,0,0,0,0,0,0],
        "火災":[0,0,0,0,0,0,0,0,0,0,0,0],
        "治安":[2,0,0,0,0,0,0,0,0,0,0,0],
        "交通":[3,0,0,0,0,0,0,0,0,0,0,0],
        "求助":[2,0,0,0,0,0,0,0,0,0,0,0],
        "其他":[0,0,0,0,0,0,0,0,0,0,0,0]
    },
    {
      "time": { 
      "date
":22, "day":5, "hours":14, "minutes":58, "month":11, "seconds":26, "time":1513925906648, "timezoneOffset":-480, "year":117 }
} ]
}

想遍歷拿到物件中的陣列:
javaScript中,陣列可以用迴圈遍歷,但是最初用for迴圈遍歷物件,顯示undefined;
如:

for (var Key in res.data.data[0]){
    console.log
( Key+':'+res.data.data[0].Key); }

而以下就可以:

   for (var Key in res.data.data[0]){
    console.log( Key+':'+res.data.data[0][Key]);
   }

for..in迴圈遍歷物件屬性,取值時應該這樣寫,obj[property]
這是為什麼呢?

因為property是變數,所以要用中括號,而不是取值。
obj.property取的是obj物件中,鍵為property的值,也就是obj的名為property的屬性值,因為不存在,所以沒拿到,就會打印出undefined

再如:

var data ={
      '陰天':'15',
      '晴天':'81',
      '雨天':'12'
};
這樣:
for (var Key in data){
     console.log( Key+':'+data[Key]);
}

以上可以在控制檯列印:
陰天:15
晴天:81
雨天:12

而以下就不行

for (var val in data){
      console.log( val+':'+data.val]);
}

會在控制檯列印:
陰天:undefined
晴天:undefined
雨天:undefined