0

我刚刚在 Chrome 开发者工具中尝试了这段代码:

var str = "1111111";
str[0] = 2;
2
console.log(str[0]);
1

如您所见,输出为 1,我预期为 2。我的结论是这并不意味着要那样工作,所以我问我如何让它工作 - 我将如何更改第一个“项目”变量str为 2?

4

4 回答 4

3

那是因为在 JavaScript 中字符串是不可变的对象。你应该使用substr功能:

String.prototype.replaceAt = function (index, char) {
  return this.substr(0, index) + char + this.substr(index + char.length);
};

var str = '11111';
console.log(str.replaceAt(0, '2'));
于 2012-08-29T11:03:06.657 回答
0

来自犀牛书

在 JavaScript 中,字符串是不可变的对象,这意味着其中的字符可能不会被更改,并且对字符串的任何操作实际上都会创建新的字符串。字符串是按引用分配的,而不是按值分配的。一般来说,当一个对象通过引用分配时,通过一个引用对该对象所做的更改将通过对该对象的所有其他引用可见。但是,由于字符串无法更改,因此您可以对字符串对象进行多次引用,而不必担心字符串值会在您不知情的情况下发生更改。

于 2012-08-29T11:03:09.403 回答
0

试试这个

str.replace(str.charAt(0), "2")
于 2012-08-29T11:05:00.030 回答
0

您需要先拆分字符串。

所以像:

str = str.split('');

然后你可以把它当作一个数组。

于 2012-08-29T11:05:38.637 回答