JavaScript toUpperCase 不起作用。为什么?
2015-07-23
1336
我正在做一个简单的功能。将所有单词的首字母变为大写,但它根本不起作用,也不显示任何错误:
function formatTitle(input) {
var words = input.split(' ');
for (var i = 0; i < words.length; i++) {
words[i][0] = words[i][0].toUpperCase();
};
return words.join(' ');
};
var newTitle = formatTitle("all words first-letter should be upper case");
document.write(newTitle);
提前致谢。
3个回答
问题是 javascript 中的字符串是不可变的。您不能像这样直接更改字符。
解决方案如下:
words[i] = words[i][0].toUpperCase()+words[i].slice(1);
但是,您可以使用正则表达式获得更简单、更快速的代码:
return input.replace(/\b\w/g,function(b){ return b.toUpperCase() })
(此处使用更完整的大写字母,而不仅仅是空格后 - 如果您想坚持使用空格,请使用
replace(/(\s+|^)\w/g,function(b){ return b.toUpperCase() })
)
Denys Séguret
2015-07-23
问题
因为
words[i][0] = 'something'
不会更新
words[i]
。
问题演示
var myVar = 'abc';
myVar[0] = 'd';
document.write(myVar); // abc
解决方案
您可以使用
substr
获取第一个字符并更新整个字符串的值。
解决方案演示
function formatTitle(input) {
var words = input.split(' ');
for (var i = 0; i < words.length; i++) {
words[i] = words[i].substr(0, 1).toUpperCase() + words[i].substr(1);
}
return words.join(' ');
}
var newTitle = formatTitle("all words first-letter should be upper case");
document.write(newTitle);
Tushar
2015-07-23
Denis 写道,原因是 javascript 中的字符串是不可变的(数字和布尔值也是不可变的)。
将字符串的第一个字符大写的另一个非常简单的解决方案是:
function firstUpper(word) {
return word.charAt(0).toUpperCase() + word.substring(1);
};
我建议也阅读这篇文章: 理解 Javascript 不可变变量
希望这有帮助
appersiano
2015-07-23