无法理解为什么代码会出错:TypeError:0是只读的

时间:2016-02-05 11:53:15

标签: javascript

我刚刚开始学习JavaScript,并在freecodecamp中尝试篝火问题。我的代码是为了使每个单词的首字母大写。 代码:

function titleCase(str) {
  str = str.toLowerCase ();
  var arr = str.split(' ');

  for(var i=0; i<arr.length; ++i) {
    arr[i][0] = arr[i][0].toUpperCase();           
  }

   str = arr.join (' ');
   return str;
  //return arr[0][0];
}

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

而是返回错误:
TypeError:0是只读的

我会理解错误,我一直在尝试字符串上的操作(它们是不可变的)。但我正在尝试编辑一个完全可变的数组。

我的代码出了什么问题?

3 个答案:

答案 0 :(得分:1)

您的代码没有给出任何错误,但它没有将第一个字符设为大写

替换此行

arr[i][0] = arr[i][0].toUpperCase(); 

通过

arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substring(1);

答案 1 :(得分:0)

您更改了您的Javascript 像这样

function titleCase(str) {
str = str.toLowerCase ();
var arr = str.split(' ');
for(var i=0; i<arr.length; ++i) {
 arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substring(1);   
}


str = arr.join (' ');
 return str;
//return arr[0][0];
}

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

答案 2 :(得分:0)

arr 确实是一个数组。它的元素是可变的,因此您可以用另一个字符串替换 arr[i]

然而,arr[i] 是一个字符串。尝试分配给 arr[i][0] 无效,因为您正在尝试修改不可变字符串。

该错误来自 freeCodeCamp 的控制台,它正确地将此标记为非法,但没有给出正确的解释。