今天在改代碼的時候發現有很多代碼的循環是用 for(var i in data)寫的,我通常都是用for(var i=0;i<data.length;i++)
就查看了一下,原來這兩個是有區別的,不能等同使用。
<script>
Array.prototype.test = function () { };
function a (){
var arr = [1, 2];
for (var i in arr)
{
alert(i+"-------------"+arr[i]);
}
}
function b(){
var arr = [1, 2];
for(var i =0;i<arr.length;i++){
alert(i+"---------"+arr[i]);
}
}
a();
b();
</script>
我們看到a()會彈出三個對話框,分別是索引值:0、1還多了一個 test, 這個 test 是 Array.prototype.test 擴展得到的。
所以不能把 for (var i in data) 當作是 for (var i = 0; i < data.length; i++) 的簡寫。
參考:http://www.cftea.com/c/2014/08/6290.asp