2011-05-31 51 views
19
var string = "This is a string"; 
var thing = str.replace("string","thing"); 

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

console.log(thing) 
>> "This is a thing" 

除了替换之外,是否还有另一种方法可以改变字符串而不给我一个新的字符串对象?javascript是否有方法来替换部分字符串而不创建新字符串?

+0

我建议你在定义任何语言的变量名时不要使用保留字(如'string')。 – 2014-03-19 19:14:02

+1

'string'不是JavaScript中的保留字([source](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Reserved_Words))。然而,'str'是'undefined'。你搞砸了变量名! – Iso 2014-03-19 19:18:34

回答

45

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

+3

如果你不想创建一个新的变量,你可以这样做:'string = string.replace(“string”,“thing”);'' – 2011-05-31 19:02:17

8

不,我知道的,但是如果你想这样做的原因只是为了让你的代码干净,你可以只分配新的字符串的老变量:

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

当然会只是让代码看起来更清晰一些,并且仍然创建一个新的字符串对象。

2

字符串不可变是有原因的。如JavaScript使用来电通过共享TECHNIC,可变的字符串是在这种情况下一个问题:

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

var str = "This is a str"; 
var thing = thinger(str); 

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