2014-09-19 133 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

相关问题