2016-06-13 28 views
-1

我有一個下拉列表,我使用.Change()來觸發函數。使用getJSON功能基本得到一定的數據並且基於那些值必須爲mp3文件創建一個數組串。字符串變量的前綴爲undefined for循環

下面的代碼是生成字符串,但始終以字符串undefined爲前綴。

在代碼中,你會注意到setTimeout這只是提供一定的延遲,直到收到數據。在下面的例子中,我使用靜態值,它仍然是前綴undefined。不知道爲什麼可能我以錯誤的方式定義了變量。

完整示例JSBin

$('.customSurah').change(function(){ 
    //surahNo = $('#surah option:selected').val(); 

    setTimeout(function(){ 
    //countSpan = $('#surah-wrapper').children().length; 
    surahNo = 1; 
    countSpan = 7; 
    var i=0; 
     for (i = 0; i <= countSpan; i++) { 
      strCat += surahNo+"/"+i+".mp3,"; 
      console.log(strCat); 
     } 
    }, 3000); 

}); 

輸出

undefined114/0.mp3, 
undefined114/0.mp3,114/1.mp3, 
undefined114/0.mp3,114/1.mp3,114/2.mp3, 
undefined114/0.mp3,114/1.mp3,114/2.mp3,114/3.mp3, 
undefined114/0.mp3,114/1.mp3,114/2.mp3,114/3.mp3,114/4.mp3, 
undefined114/0.mp3,114/1.mp3,114/2.mp3,114/3.mp3,114/4.mp3,114/5.mp3, 
undefined114/0.mp3,114/1.mp3,114/2.mp3,114/3.mp3,114/4.mp3,114/5.mp3,114/6.mp3, 
+0

where'strCat' defined?用空白字符串聲明它的初始值,它應該工作正常 –

+0

它被定義爲side for循環這裏是完整的例子http://jsbin.com/nicutokago/edit?html,output – Learning

回答

3

你有一個變量strCat未初始化,然後你在這條線的值追加到它:

strCat += surahNo+"/"+i+".mp3,"; 

由於strCat在第一輪循環中未初始化,則會在字符串前面加上undefined

要解決這個問題,就需要變量先初始化空值:

var strCat = ''; // <- initialize your variable to empty value 
surahNo = 1; 
countSpan = 7; 
+1

有人正在用downvote並沒有提到任何理由。是否downvote用戶辯解downvote – Learning

+0

你說得對,我不是一個JavaScript的人很少使用它..犯了一個基本的錯誤。 – Learning

+1

我覺得SO用戶在這個評論中提到他已經在循環外定義了strCat – brk

3

結果是完全有效的按照JavaScript的關注。

爲什麼?

我想你可能知道如果你在javascript中聲明瞭任何變量,並且你沒有指定它的默認值,那麼自動undefined被分配。所以,這是有效的。

var somevar; // non assigned default value set to -> undefined 
 
console.log(somevar); // logs undefined

但是,
你的情況,你必須給它像一個空字符串var strCat "";默認值:當你這樣做會發生什麼。所以,現在當你這樣做:

var somevar = ""; // assigned default value to set to -> "" 
 
console.log(somevar); // logs ""


因此,解決你的問題是,你必須初始化/分配一個默認值的變量。如:

var strCat = "";