2014-09-19 181 views
-1

我正在學習JavaScript,我很失望,下面的代碼不起作用。它仍然是一個小寫的「我」。我試圖把字符串中的每一個字母都大寫(因此是for循環),但我想停下來解決出錯的地方。如何將字符串中的第一個字母大寫?

str = 'i ran there'; 

for(var i = 0; i<str.length; i++){ 
    if(i===0){ 
    str[i] = str[i].charAt(0).toUpperCase(); 
    } 
} 


console.log(str); 

有人可以請描述這裏出了什麼問題嗎?

+0

http://stackoverflow.com/questions/2332811/capitalize-words-in-string – lastr2d2 2014-09-19 02:17:16

+0

字符串是在JavaScript中不可變的。 – 2014-09-19 02:20:30

+0

@RaymondChen喜歡BOD的確定性? :) – 2014-09-19 02:29:18

回答

0

你必須創建一個新的字符串,因爲在JavaScript字符串是不可變的:

首先得到的每一個字分開:

var arrayOfstrings = s.split(" "); 

然後你可以把每串像有自己的文字

花式方式:

var capFirstLetter = arrayOfStrings[index].replace(/^./, function (match) { 
    return match.toUpperCase(); 
}); 

這只是一個regex/^./表示字符串中的第一個字符。剩下的就是自我解釋。

或者這樣說:

var s = arrayOfStrings[index]; 
var s2 = s[0].toUpperCase()+ s.substr(0,1); 

或更本真的跛腳方式

var s = arrayOfStrings[index]; 
var newS = ""; 
for(var i = 0; i < s.length; i++){ 
    if(i == 0) newS+= s[0].toUpperCase(); 
    else newS+= s[i]; 
} 

當然,所有這些都可以在一個for循環來完成封頂所有這些,一起放回:

var s = "hello woorld hello world"; 
var arrayOfStrings = s.split(" "); 
for(var i = 0; i < arrayOfStrings.length; i++){ 
    arrayOfStrings[i]= arrayOfStrings[i].replace(/^./, function(match) {return match.toUpperCase();}); 
    } 
var s2 = arrayOfStrings.join(" "); 
+0

@RobG好了,修正 – Jay 2014-09-19 17:22:13

0

如果我理解你的問題,你可以這樣做 -

var str = 'i ran there'; 
 
var arr = str.split(" "); 
 
var div = document.getElementById("out"); 
 
for(var i = 0; i < arr.length; i++){ 
 
    // The First letter 
 
    // arr[i] = arr[i].substring(0,1).toUpperCase() + arr[i].substring(1); 
 
    // Every letter 
 
    arr[i] = arr[i].toUpperCase(); 
 
    div.innerHTML += arr[i] + "<br />"; 
 
}
<div id="out"></div>

至於什麼是你的代碼怎麼回事,你不能修改陣列支持字符串(假設它是一個數組)那樣的。

+0

是最近添加到Stack Overflow的交互式代碼片段嗎? – Wold 2014-09-19 02:24:01

+0

是的,它是一個新玩具:) – 2014-09-19 02:24:27

+0

@Wold [是](http://blog.stackoverflow.com/2014/09/introducing-runnable-javascript-css-and-html-code-snippets/?cb=1 )。 – 2014-09-19 02:24:37

0

這裏發生了什麼問題是JavaScript中的字符串是不可變的。

你不能改變它們。你可以做的是創建一個新的字符串的變化。

0

您正在索取String str的索引i。因爲str是一個字符串,所以你不能使用索引值來獲取字符串中的某些字符 - 試試console.log(str[0]) - 它將返回undefined。

要完成您正在嘗試做的事情,您需要在每個字母大寫後簡單地添加一個新字符串。例如:

str = 'i ran there'; 
capStr = '' 

for(var i = 0; i < str.length; i++){ 
    if(i === 0) capStr += str.charAt(i).toUpperCase(); 
    else capStr += str.charAt(i); 
} 

console.log(capStr); 
+0

這基本上是正確的答案/我在找什麼。但是,如果在for循環(在capStr行之前)中添加if/else語句來檢查(i === 0)是否正是我正在尋找的內容。謝謝!! – 2014-09-19 02:38:10

相關問題