开发者问题收集

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