2016-06-13 2 views
-1

.Change()를 사용하여 함수를 트리거하는 드롭 다운이 있습니다. 함수는 기본적으로 getJSON을 사용하여 특정 데이터를 가져오고 그 값을 기반으로 mp3 파일에 대한 배열 문자열을 만들어야합니다.for 루프 앞에 undefined 접두어가 붙은 문자열 변수

아래 코드는 문자열을 생성하고 있지만 항상 문자열 앞에 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); 

}); 

OUTPUT

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

여기서'strCat'가 정의되어 있습니까? 빈 문자열로 초기 값으로 선언하면 정상적으로 작동해야합니다. –

+0

루프에 대해 정의 된 외부 예입니다. 전체 예제는 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

당신이 맞아, 난 아주 드물게 그것을 사용하는 자바 스크립트 사람 아니에요 .. 정당화 수 기본 실수를 했나. – Learning

+1

나는이 사용자가이 코멘트에 언급 한 바를 루프 밖에서 strCat을 정의했다고 생각한다. – brk

3

결과는 자바 스크립트 우려에 따라 완벽하게 유효합니다.

왜?

자바 스크립트에서 변수를 선언하고 기본값을 지정하지 않으면 자동으로 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 ""


그래서, 문제의 해결책이, 당신은 초기화 할 수 있습니다/ 귀하의 변수에 기본값을 할당합니다. like :

var strCat = ""; 
관련 문제