如何将字符串中的第一个字母大写?

时间:2014-09-19 02:15:36

标签: javascript

我正在学习JavaScript,我很失望以下代码不起作用。它仍然是一个小写字母" i"。我试图大写字符串中的每个字母(因此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);

有人可以描述这里出了什么问题吗?

4 个答案:

答案 0 :(得分: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];
}

当然,所有这些都可以在forloop中完成所有这些并将它们重新组合在一起:

 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(" ");

答案 1 :(得分:0)

如果我理解你的问题,你可以用 -

之类的东西来做

&#13;
&#13;
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 />";
}
&#13;
<div id="out"></div>
&#13;
&#13;
&#13;

至于你的代码中发生了什么,你不能像这样修改支持String的数组(假设它是一个数组)。

答案 2 :(得分:0)

这里出错的是javascript中的字符串是不可变的。

你无法改变它们。您可以做的是创建一个带有更改的新字符串。

答案 3 :(得分:0)

您要求String str的索引i。因为str是一个String,所以你不能使用索引值来获取字符串中的某些字符 - 试试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);