Javascript JS数组-带“的奇怪值;在「;环

Javascript JS数组-带“的奇怪值;在「;环,javascript,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-

有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;}


...
for(psnb_arr中的var i){
var psnb=psnb_arr[i];
控制台日志(i+'-'+psnb);
}
//firebug中的wierd输出:
0-14-007
1-14-008
2-14-009

复制函数(start,length){start=start | | 0;if(start您没有对象,也没有关联数组(这些在JavaScript中不存在)。您在“普通”(数字)数组中拥有的内容。它有键;数组索引(这是
0-
等的来源)

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

您希望在此处为
循环使用正常的

for(var i = 0; i < psnb_arr.length; i++){
    var psnb=psnb_arr[i];
    console.log(i+'-'+psnb);
}
for(变量i=0;i
它的本质是什么,它的输出是正确的。i=第一个输出上的“0-”,就像它在代码中写的一样。你的“没有键的对象”只是一个数组。它确实有键,它们是数字的。我的意思是在“2-14-009”-“复制函数…”后面的文本你能做一把小提琴来重现你的问题吗?你在其他浏览器中没有这个功能吗?我只是得到数组输出,而不是其他东西。你使用的是什么版本的Firefox/firebug?@putvande:是的,我完全知道。我解释了发生这种情况的原因以及如何解决它。问题是什么?谢谢,我不知道“有时候JavaScript库会添加这些“@ihtus:你是在使用类似还是一个?这通常就是原因。他们向
数组添加方法。prototype
。作为另一个选项,hasOwnProperty可以解决上述问题,但无论如何@RocketHazmat解释是正确的。”OK@EugeneP:是的,您可以将
hasOwnProperty
添加到
for..in
循环中,但这更简单(我认为更好的做法是)只为
循环(或
.forEach()
)使用一个普通的
。:-)