>我有一个下拉菜单,我使用它.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,
有一个未初始化的变量strCat
,然后在以下行中向其追加一个值:
strCat += surahNo+"/"+i+".mp3,";
由于strCat
在第一轮循环中未初始化,因此您会undefined
附加到字符串的前面。
要解决此问题,您需要先将变量初始化为空值:
var strCat = ''; // <- initialize your variable to empty value
surahNo = 1;
countSpan = 7;
根据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 = "";