2016-06-13 76 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 = "";