2012-09-05 94 views
0

我無法理解for循環的行爲。 的jQuery:For循環給出了意想不到的結果

$('#btnTest').on("click", function() { 

      var thumbUrl = "http:localhost/File/Modules/FileManager/Library/1041323042_12.jpg"; 
      var arrurl = thumbUrl.split("/"); 
      var i; 
      var result; 
      for (i = 0; i < arrurl.length - 1; i++) { 
       result += arrurl[i] + '/'; 
      } 
      alert(result); 
}); 

和HTML:

<input type="button" class="ThumbLink" value="Test" id="btnTest"/> 

alert給出了結果:

undefinedhttp:localhost/File/Modules/FileManager/Library/

凡本undefined來from.What是我的錯在for循環? 。謝謝。

我的jsfiddle:

jsfiddle

+0

請注意,如果代碼的目的是爲了消除任何是最後的'/'字符後,你可以用'VAR結果做在一個線= thumbUrl.replace(/ [^ \ /] * $ /,「」);'。 (或者另一種選擇是用'arrurl.pop(); result = arrurl.join(「/」)+「/」;' - 也就是在加入數組之前刪除數組的最後一個元素回到一起。) – nnnnnn

+0

@nnnnnn我無法理解正則表達式,所以我總是避免使用它,但它的工作完美謝謝人。 –

+0

不客氣。那個正則表達式模式''[^ \ /] * $'只是說匹配字符串末尾的零個或多個非斜槓字符(而'.replace()'用空字符串替換了所有字符)... – nnnnnn

回答

1

也許,因爲你根本追加result通過每一次循環中,你可以先不要將它設置爲其他東西undefined

: 
var result = ""; 
for (i = 0; i < arrurl.length - 1; i++) { 
    result += arrurl[i] + '/'; 
} 
alert(result); 
: 

結交正確的輸出是改變你的jsfiddle鏈接結果:

http:localhost/File/Modules/FileManager/Library/ 
1

您還沒有初始化result任何東西,所以這將是undefined

因爲你正試圖將字符串拼接到undefined,它會toString()undefined,獲取字符串"undefined",並開始來連接到這一點。

您可以通過將result初始化爲空字符串("")來停止此操作。

1

你必須給結果的初始值:

var result = ''; 

否則會導致您連接的前未定義網址:

var x; 
x += 'foo'; // x === 'undefinedfoo'; 
+0

另外,在你的循環中它應該是'我

0

聲明

var result = ""; 

然後它會正常工作:)

相關問題