我正在学习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);
有人可以描述这里出了什么问题吗?
答案 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)
如果我理解你的问题,你可以用 -
之类的东西来做
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;
至于你的代码中发生了什么,你不能像这样修改支持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);