JS数组 - 带有“for in”循环的奇怪值

时间:2014-02-14 20:58:02

标签: javascript

让JS数组没有密钥

代码1

var psnb_arr=['14-007', '14-008', '14-009'];
console.log(psnb_arr);

//output in firebug: ["14-007", "14-008", "14-009"]

代码2

for (var i in psnb_arr) {
  var psnb=psnb_arr[i];
  console.log(i+'-'+psnb);
}

//wierd output in firebug:
0-14-007
1-14-008
2-14-009

copy-function (start,length){start=start||0;if(start<0)start=this.length+start;

length=length||(this.length-start);var newArray=[];for(var i=0;i<length;i++)newArray[i]=this[start++];return newArray;}

remove-function (item){var i=0;var len=this.length;while(i<len){if(this[i]===item){this.splice(i,1);len--;}else{i++;}} return this;}

contains-function (item,from){return this.indexOf(item,from)!=-1;}


...

循环中对于console.log的firebug中这个奇怪的输出是什么? 我的意思是“2-14-009”之后的文字 - “复制功能......”

1 个答案:

答案 0 :(得分:2)

您没有对象,也没有关联数组(JavaScript中不存在这些数组)。你在“普通”(数字)数组中有什么。 有钥匙;数组索引(0-等来自的地方)。

您遇到的问题是因为您在阵列上使用for...in。这是一种不好的做法。 Array原型可以包含属性(有时候JavaScript库会添加这些属性),因此您将迭代这些属性的所有,而不仅仅是数组值。

你想在这里使用普通的for循环。

for(var i = 0; i < psnb_arr.length; i++){
    var psnb=psnb_arr[i];
    console.log(i+'-'+psnb);
}