为什么赢得数组[i] .charAt(0).toUpperCase()传递给数组[i] [0]

时间:2015-09-23 20:56:09

标签: javascript arrays

我正在尝试创建一个带有字符串的javascript程序,并将每个单词的第一个字母大写,并使每个其他字符小写。



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"));
&#13;
&#13;
&#13;

由于某种原因,array[i].charAt(0).toUpperCase();无法将其值传递给array[i][0]。这最终使得它只返回所有小写字母的字符串,而不是让每个单词的首字母大写。

3 个答案:

答案 0 :(得分:3)

听起来你想做更像这样的事情:

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");

可以使用括号表示法将字符串 读取为char数组。但是,由于字符串不是可变对象,因此无法更改特定字符。

答案 1 :(得分:3)

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

现场演示:

&#13;
&#13;
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"));
&#13;
&#13;
&#13;

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

答案 2 :(得分:0)

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