字符串变量,前缀为for循环中的undefined

时间:2016-06-13 04:37:07

标签: javascript jquery

我有一个下拉列表,我使用.Change()来触发一个函数。函数基本上使用getJSON获取某些数据,并且基于这些值必须为mp3文件创建数组字符串。

下面的代码是生成字符串,但始终将前缀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,

2 个答案:

答案 0 :(得分:3)

您有一个未初始化的变量strCat,然后在此行中为其附加一个值:

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

由于strCat未在第一轮循环中初始化,因此您会在字符串前加undefined

要解决此问题,您需要先将变量初始化为空值:

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

答案 1 :(得分:3)

根据javascript,结果完全有效。

为什么呢?

我想您可能知道如果您在javascript中声明任何变量,并且您没有分配其默认值,则会自动分配undefined。所以,这是有效的。当你这样做时会发生什么:

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

但是,
在您的情况下,您必须给它一个默认值,如空字符串var strCat "";。所以,现在当你这样做时:

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

因此,您的问题的解决方案是,您必须初始化/分配您的变量的默认值。喜欢:

var strCat = "";