首先引出問題
問題代碼部分
var temp = '';
var taskscreen = {}
.....
for(var item in taskscreen){
if(taskscreen[item]!=''&&taskscreen[item]!='-萬'&&taskscreen[item]!='至'&&taskscreen[item]!='-人'&&taskscreen.hasOwnProperty(item)){
if(temp==''){
temp=item+':'+taskscreen[item];
}
else {
temp=temp+';'+item+':'+taskscreen[item];
}
}
}
最後生成的temp 爲 function item() {[native code]}:undefined
[native code]表示瀏覽器底層實現的c++機器語言代碼
for in 在遍歷對象包含繼承和自身屬性,繼承屬性就有函數引用,
對象在轉化爲字符串事就是 function item() {[native code]}:undefined
在瀏覽器中進行如下打印,就會發現問題所在
問題代碼中 item+':'進行隱式轉換,
item+':' === item.toString()+':' //true
Object.keys(obj)返回obj自身屬性的一個數組
本問題總結
- 時刻注意操作符在背後做的事情
- 推薦使用Object.keys(obj).forEach()遍歷對象
- 對象遍歷缺乏類型判斷