2014-09-23 74 views
1

我寫了這段JavaScript代碼,但它總是結束** undefined ** mycode?我做錯了什麼/未來如何防止這種情況。我通過chrome JavaScript控制檯運行我的代碼。爲什麼我的代碼總是以undefined結束?

這裏是我的代碼

//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); 

感謝您的任何答案提前

+1

什麼是不確定的?代碼本身不能被「定義」。 – 2014-09-23 17:50:44

+0

如果我輸入你好,輸出是undefinedolleh。所以代碼正常工作,但是undefined這個詞自動放在它的前面 – Frenchiejnr 2014-09-23 17:52:27

+0

哦,你說的是'alert()'中顯示的字符串,而不是控制檯中的結果。 – 2014-09-23 17:53:53

回答

2

更改你的循環從

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

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

的問題是,數組指數在jav ascript是基於0的。

假設在提示符中輸入的字符串是「abc」,字符串的長度是3.在循環中,您可以將其作爲未定義的string[3]進行訪問。因此錯誤。

這裏是小提琴展示了更新後的代碼:

+3

爲什麼?對於初學者來說,**解釋**肯定會更有幫助。 – 2014-09-23 17:51:57

+1

因爲a [a.length]是_undefined_,按照所有數組的定義。 – Malvolio 2014-09-23 17:53:26

+0

@FelixKling編輯正在進行中:) – karthikr 2014-09-23 17:55:43

0

你不應該做的字符串[我],而不是做string.charAt(我);還要將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

不,這不是問題。 *編輯:*循環變量是問題,而不是括號表示法。 – 2014-09-23 17:52:50

+0

缺少'charAt'會導致代碼在Internet Explorer上中斷。你的良心是否好或壞。 – Malvolio 2014-09-23 17:54:26

+1

如果你希望這個跨瀏覽器使用charAt不是[]這將是一個問題@Felix Kling – brso05 2014-09-23 17:56:46

0

添加字符串[i]是此代碼在警告您之前所做的最後一件事情,因此最後一個字符串[i](數組中的第一個元素,我假設)的值爲undefined。

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]); 
} 
相關問題