2016-04-10 47 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循環語句將返回所有可枚舉的屬性,包括具有非整數名稱和那些被繼承的屬性。