关于javascript:为什么不数组[i].charat(0).touppercase()传递到数组[i][0]

Why won't array[i].charAt(0).toUpperCase() pass on to array[i][0]

本问题已经有最佳答案,请猛点这里访问。

我正在尝试制作一个javascript程序,它获取一个字符串,将每个单词的第一个字母大写,并将其他所有字符变为小写。

1
2
3
4
5
6
7
8
9
10
11
12
function titleCase(str) {
  str = str.toLowerCase();
  var array = str.split("");
  for(var i =0; i< array.length ; i++){
    array[i][0] = array[i].charAt(0).toUpperCase();

  }
  var finalString = array.join("")
  return finalString ;
}

alert(titleCase("I'm a little tea pot"));

由于某种原因,array[i].charAt(0).toUpperCase();不会将其值传递给array[i][0]。最后,它返回的字符串只有所有小写字母,而不是每个单词的第一个字母都大写。


javascript字符串是不可变的,因此您不能通过使用[]运算符对单个字符进行索引来实际更改它们。这里有一个固定版本,它使用substring来构建最终字符串:

现场演示:

1
2
3
4
5
6
7
8
9
10
11
12
function titleCase(str) {
  str = str.toLowerCase();
  var array = str.split("");
  for(var i =0; i< array.length ; i++){
    array[i] = array[i].charAt(0).toUpperCase() + array[i].substring(1);

  }
   var finalString = array.join("")
  return finalString ;
}

alert(titleCase("I'm a little tea pot"));

jsfiddle版本:https://jsfiddle.net/rakdtpbb/


听起来你想做些类似的事情:

1
2
3
4
5
6
7
8
9
10
11
12
function titleCase(str) {
  str = str.toLowerCase();
  var array = str.split("");
  for(var i =0; i< array.length ; i++){
    //array[i] is an immutable string. So we need to rebuild it instead.
    array[i] = array[i].charAt(0).toUpperCase() + array[i].substring(1);
  }
   var finalString = array.join("")
  return finalString ;
}

titleCase("I'm a little tea pot");

字符串可以使用括号表示法作为字符数组读取。但是,不能这样更改特定字符,因为字符串不是可变对象。


toUpperCase()方法返回转换为大写的字符串值,但不影响字符串本身的值。