2010-02-12 128 views
8

下面的javascript有什麼作用?Javascript - 這行是做什麼用的?

var groups = countrylist.split(',');  
for(var i = -1, group; group = groupsCounty[++i];){ 
    ... 
} 
+1

'groups'和'groupsCounty'應該是同一個變量嗎? – 2010-02-12 15:46:29

+0

我很想知道 - 我試圖找出頁面上有什麼損壞:p – digiguru 2010-02-12 16:03:23

+0

這是肯定的。更改'var groups = countrylist.split(',');' 'var groupsCounty = countrylist.split(',');'。 可能有人重構並重命名該變量,但沒有完成他的工作。 – 2010-02-12 16:05:41

回答

11
With i starting at -1 
increase i by 1 
get the ith element from the groupsCounty array 
if there is no such element: stop 
otherwise: assign it to group and carry on (with whatever "…" is) 

它的優化版本:

for (var i = 0; i < groupsCounty.length; i++;){ 
    var group = groupsCounty[i]; 
    … 
} 
+0

以這種方式循環安全嗎? (在所有的瀏覽器中都可以工作嗎?) – digiguru 2010-02-12 15:45:13

+0

問題的for循環在這個答案中是否超過了for循環?在CPU或內存中使用? – jpabluz 2010-02-12 15:47:07

+0

@大衛,這是正確的嗎? – 2010-02-12 15:47:23

2

它使用group中存在的值作爲守護條件迭代組的元素。即使用JavaScript Truthiness來控制循環迭代的次數,因爲當沒有值可以分配給它時,保護將是錯誤的。

1

for loop遍歷groups數組,直到groupsCounty[++i]返回一個錯誤的值。

下列術語的用法:

for (<initial-expression>; <condition>; <final-expression>) 

初始表達var i = -1, group聲明變量igroup。對於每次迭代,循環條件group = groupsCounty[++i]指定下一個數組值爲group。如果該表達式是錯誤的(例如groupsCounty[++i]在出界時返回未定義),則循環停止。並且最終表達式爲空,因爲i已經在關聯表達式中增加。

-1

這相當於

for (var group in groupsCounty) { 
    ... 
} 

對於具有對索引的訪問(i)的附加價值。

+0

'group'會__be _指數值,那麼您將不得不使用'anotherVariable = groupdCountry [group]'取消引用該數組來獲取該值。 – AnthonyWJones 2010-02-12 15:56:47

+1

這不等於。 'for ... in'循環以未定義的順序枚舉對象的所有屬性,包括從對象原型繼承的屬性。所以你有一個不同的循環順序,可能會迭代更多的屬性。另外,在你的例子中,「group」將是屬性名稱而不是屬性值,因爲它在原始問題中。 – 2010-02-12 15:59:19

2

它這樣做: -

var groups = countrylist.split(',');  
for(var i = 0; i < groups.length; i++) 
{ 
    var group = groups[i] 
    ... 
} 

唯一的區別是,上面的是更爲常見,更容易辨認。你不會發布上面的代碼,問「這是幹什麼?」。

你發佈的代碼是一個聰明的開發,但不一定是好的編碼實踐的例子。