2016-04-10 49 views
-2

正确的代码。它打印在控制台:
https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSCFJNHQ2k1hvNCD3F9zKp9WiPooSBkjUy-ymynu1T0kmiaW-7r
这是相当正确的,bacaouse的只有一个search_objects项。
在循环中非常奇怪的行为javascript

  var j; 
     for (j=0;j< search_objects.length; j++){ 
      console.log(j) 
      website = search_objects[j].website; 
      var rand = Math.floor(Math.random()*3) 
      var img_src; 
      switch (rand){ 
       case 0: img_src = "res1.png"; break; 
       case 1: img_src = "res2.png"; break; 
       case 2: img_src = "https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSCFJNHQ2k1hvNCD3F9zKp9WiPooSBkjUy-ymynu1T0kmiaW-7r"; break; 
      } 
      console.log(img_src); 
      var template_result = '<div class="owl-item " ..........div>' 

      console.log(search_objects[j].ID_subr) 
      add_carousel_item(template_result) 


     } 

但是如果我改变它为for循环它会再执行一次。

 var j; //same thing if i declare like this: for(var j in search_objects) 
     for (j in search_objects){ 
      console.log(j) 
      website = search_objects[j].website; 
      var rand = Math.floor(Math.random()*3) 
      var img_src; 
      switch (rand){ 
       case 0: img_src = "res1.png"; break; 
       case 1: img_src = "res2.png"; break; 
       case 2: img_src = "https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSCFJNHQ2k1hvNCD3F9zKp9WiPooSBkjUy-ymynu1T0kmiaW-7r"; break; 
      } 
      console.log(img_src); 
      var template_result = '<div class="owl-item " ..........div>' 

      console.log(search_objects[j].ID_subr) 
      add_carousel_item(template_result) 


     } 

而这种循环在这第二种情况下将被执行2时间时search_objects只有一个项目,这是通过打印到控制台的对象本身和它的长度被证明。
虽然这是显示在控制台中。
1 //长度
0 //Ĵ
res1.png //从的Math.random IMG
66 // j的第一项
独特//值的属性??????! !!!!!!!!!!!!
res2.png // IMG从的Math.random
未定义//似乎显示search_objects [唯一]

公告的性质:发生这种情况大部分的时间。不是100%的时间。让我们说这不会发生,当我把它作为我刷新页面后做的第一件事。 以前有人见过这样的事情吗?

+0

可能重复[在JavaScript中通过数组循环](http://stackoverflow.com/questions/3010840/loop-through-array-in-javascript) –

+0

那么没有理由使用'for ..无论如何,在数组的循环中。 – Pointy

回答

0

for...in将不仅返回数组元素的索引,而且还将返回被迭代对象的所有可枚举属性的名称。所以它看起来像一个名为unique的属性被添加到您的代码中其他地方的search_objects对象中。

从这documentation page

数组索引只是用整数名称枚举的属性和在其它方面相同的一般对象属性。无法保证...将以任何特定顺序返回索引。 for ... in循环语句将返回所有可枚举的属性,包括具有非整数名称和那些被继承的属性。