JavaScript toUpperCase不起作用.为什么?

4 javascript

我正在做一个简单的功能.将所有单词首字母大写为大写,但它根本不起作用,既不显示任何错误:

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);
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Den*_*ret 9

问题是javascript中的字符串是不可变的.你不能只改变像这样的字符.

解决方案是:

words[i] = words[i][0].toUpperCase()+words[i].slice(1);
Run Code Online (Sandbox Code Playgroud)

但是使用正则表达式可以获得更简单,更快速的代码:

return input.replace(/\b\w/g,function(b){ return b.toUpperCase() })
Run Code Online (Sandbox Code Playgroud)

(这里有一个更完整的大写,不仅仅是在空格之后 - 如果你想坚持使用空间replace(/(\s+|^)\w/g,function(b){ return b.toUpperCase() }))


Tus*_*har 6

问题

因为

words[i][0] = 'something'
Run Code Online (Sandbox Code Playgroud)

没有更新words[i].

问题演示

var myVar = 'abc';

myVar[0] = 'd';

document.write(myVar); // abc
Run Code Online (Sandbox Code Playgroud)

您可以使用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);
Run Code Online (Sandbox Code Playgroud)