如何对字符串进行突变?JavaScript的

How to make mutation of a string? JavaScript

提问人:Yellowfun 提问时间:2/9/2018 最后编辑:vol7ronYellowfun 更新时间:2/5/2022 访问量:11134

问:

如果对象默认是可变的,为什么在这种情况下它不起作用? 如何使对象“s”中的键“a”的突变值?

var s = {
  a: "my string"
};

s.a[0] = "9"; // mutation
console.log(s.a); // doesn't work

JavaScript的 可变 突变

评论

7赞 yue you 2/9/2018
Javscript 字符串是不可变的 检查这个答案。stackoverflow.com/questions/51185/......
0赞 Terry 3/24/2018
JavaScript 字符串是不可变的吗?我在 JavaScript 中需要“字符串构建器”吗?

答:

3赞 Elliot B. 2/9/2018 #1

JavaScript 中的字符串是不可变的。这意味着您不能修改现有字符串,只能创建一个新字符串。

var test = "first string";
test = "new string"; // same variable now refers to a new string
7赞 yue you 2/9/2018 #2

您正在尝试更改 原语 ,它在 Javascript 中是不可变的。String

例如,如下所示:

var myObject = new String('my value');
var myPrimitive = 'my value';

function myFunc(x) {
  x.mutation = 'my other value';
}

myFunc(myObject);
myFunc(myPrimitive);

console.log('myObject.mutation:', myObject.mutation);
console.log('myPrimitive.mutation:', myPrimitive.mutation);

应输出:

myObject.mutation: my other value
myPrimitive.mutation: undefined

但是你可以在原始 String 的原型中定义一个函数,比如:

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

var hello="Hello World"
hello = hello.replaceAt(2, "!!")) //should display He!!o World

或者,您可以为 s.a 分配另一个值,如s.a = 'Hello World'

评论

0赞 yue you 2/9/2018
@JonasW。谢谢你的建议
3赞 Nina Scholz 2/9/2018 #3

你试图改变一个字符串,这是不可能的,因为字符串是不可变的。您需要分配新值。

下面是一个花哨的样式,可以在给定的位置更改字母。

var s = { a: "my string" };

s.a = Object.assign(s.a.split(''), { 0: "9" }).join('');

console.log(s.a);

评论

0赞 Yellowfun 2/9/2018
那么你能想到可变的例子吗?const egg = { name: “矮胖子” };egg.isBroken = 假;console.log(蛋);
0赞 Nina Scholz 2/9/2018
对不起,我不明白。
0赞 Yellowfun 2/9/2018
在我的例子中,const egg 发生了突变?
2赞 Nina Scholz 2/9/2018
const仅表示您不能将某些内容分配给 egg,但不能分配给属性。这始终是可能的。
2赞 Nina Scholz 2/9/2018
这是突变,很明显。但不是一个好的(基于意见的)例子,只是一个例子。
0赞 vol7ron 3/25/2018 #4

您正在尝试使用元素访问器更改字符串,这是不可能的。如果将 a 应用于脚本,则会看到它出错:'use strict';

'use strict';

var s = {
  a: "my string"
};

s.a[0] = '9';       // mutation
console.log( s.a ); // doesn't work

如果要替换字符串的字符,则必须使用其他机制。如果你想看到对象是可变的,只需改为这样做,你就会看到 的值已更改。s.a = '9'a

'use strict';

var s = {
  a: "my string"
};

s.a = s.a.replace(/./,'9')
console.log(s.a);