javascript是否有一种方法来替换字符串的一部分而不创建新的字符串?

dja*_*bs7 35 javascript string

var str = "This is a string";
var thing = str.replace("string","thing");

console.log( str )
>> "This is a string" 

console.log( thing )
>> "This is a thing" 
Run Code Online (Sandbox Code Playgroud)

除了替换之外,我还能使用另一种方法来改变字符串,而不给我一个新的字符串对象吗?

Cri*_*hez 67

不,JavaScript中的字符串是不可变的.

  • 如果你不想创建一个新变量,你可以做这样的事情:`string = string.replace("string","thing");` (6认同)

Jan*_*Vos 10

并不是我所知道的,但是如果您想要这样做的原因只是为了保持您的代码清洁,您只需将新字符串分配给旧变量:

var string = "This is a string";
string = string.replace("string", "thing");
Run Code Online (Sandbox Code Playgroud)

当然,这只会使代码看起来更清晰,仍然会创建一个新字符串.


Poy*_*man 5

字符串不可变是有原因的。由于Javascript使用按共享调用技术,因此在这种情况下可变字符串将是一个问题:

function thinger(str) {
    return str.replace("string", "thing");
}

var str = "This is a str";
var thing = thinger(str);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您希望按值传递字符串,但不是。如果str是可变的,thinger会改变str,那将是一个非常奇怪的效果。