2014-09-23 3 views
1

이 자바 스크립트 코드를 작성했지만 항상 끝납니다 ** undefined ** mycode? 나는 무엇을 잘못 했는가/어떻게하면 이것을 막을 수 있습니까? 크롬 자바 스크립트 콘솔을 통해 코드를 실행하고 있습니다. 여기 내 코드가 항상 정의되지 않은 상태로 끝나는 이유는 무엇입니까?

사전

+1

? 코드 자체는 "정의되지"않을 수 있습니다. –

+0

내가 hello를 입력하면 출력은 정의되지 않습니다. 그래서 코드는 정상적으로 작동하지만 정의되지 않은 단어는 자동으로 앞에 놓입니다. – Frenchiejnr

+0

오, 콘솔의 결과가 아닌'alert()'에 표시되는 문자열에 대해 이야기하고 있습니다. –

답변

2

변경

문제가
for (var i = stringLength-1; i >= 0; i--){ 

for (var i = stringLength; i >= 0; i--){ 

에서 루프, 배열의 모든 답변을

//Reverse a string 
//-------------------------// 
//Input a string 

var string = prompt("Please enter string"); 
      //console.log(string); 

//Find length of string 

var stringLength = string.length; 
      //console.log(stringLength); 

//Creating an empty string for outputting answer 

var reversedString = ""; 

//Start from length of the string and work backwards, inputting letter 1 at a time. 
for (var i = stringLength; i >= 0; i--){ 
    reversedString += string[i]; 
       //console.log(string[i]); 
} 

//Outputting the reversed string; 
alert(reversedString); 

덕분에 내 코드입니다 jav의 인덱스 ascript는 0 기준입니다.

프롬프트에 입력 된 문자열이 "abc"이고 문자열의 길이가 3이라고 가정합니다. 루프에서이 문자열은 정의되지 않은 string[3]으로 액세스합니다. 따라서 오류. 여기

는 바이올린 업데이트 된 코드를 보여주는 것입니다 :

+3

왜? 초보자의 경우 ** 설명 **이 분명 도움이 될 것입니다. –

+1

a [a.length]는 _undefined_이므로 모든 배열에 정의됩니다. – Malvolio

+0

@FelixKling 편집이 진행 중입니다. – karthikr

0

당신은 문자열을하지 말아야 [내가] 대신하면 String.charAt (i)를 할; 또한 stringLength를 stringLength - 1로 변경하십시오. 그러면 문제가 해결 될 것입니다. 다른 브라우저에서 작동하도록하려면 charAt 표기법을 사용하십시오. Javascript 배열은 0이 아닌 1에서 시작하므로 마지막 요소를 가져 오는 길이 - 1을 수행합니다. 예를 들면 다음과 같습니다.10 개 요소 배열 인덱스의 경우 0-9입니다. 10은 배열의 경계 밖에 있습니다.

for (var i = (stringLength - 1); i >= 0; i--){ 
reversedString += string.charAt(i); 

정답입니다.

+0

아니요, 그게 문제가 아닙니다. * edit : * 괄호 표기법이 아닌 루프 변수가 문제입니다. –

+0

'charAt'가 부족하면 Internet Explorer에서 코드가 중단됩니다. 그것이 좋은 것이 든 나쁜 것이 든 양심의 가책이됩니다. – Malvolio

+1

브라우저에서이 기능을 사용하려면 charAt []를 사용하십시오. 문제가 될 것입니다. @Felix Kling – brso05

0

문자열 추가 [i]는이 코드가 경고하기 전에 수행하는 마지막 작업이므로 마지막 문자열 [배열] (배열의 첫 번째 요소로 가정)은 정의되지 않은 값을 갖습니다.

for (var i = stringLength; i >= 0; i--){ 
     reversedString += string[i]; 
       //console.log(string[i]); 
} 
나는 이것이 왜 내 머리 위에 모르겠지만, 나는 그것이 규칙에 충실 항상 좋은 생각이라고 알고 있으며, 루프에 대한 하나입니다

:

for(var i = 0; i < [length variable];i++) { 
    ... 
} 
0

오른쪽 코드는 정의 란 무엇

for (var i = stringLength-1; i >= 0; i--){ 
    reversedString += string[i]; 
    console.log(string[i]); 
} 
관련 문제