Does javascript have a method to replace part of a string without creating a new 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" 

Is there another method I can use, besides replace, that will alter the string in place without giving me a new string object?



No, strings in JavaScript are immutable.


Not that i am aware of, however if the reason you want to do this is just to keep your code clean you can just assign the new string the the old variable:

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

Of course this will just make the code look a bit cleaner and still create a new string.


There is a reason why strings are immutable. As Javascript use call-by-sharing technic, mutable string would be a problem in this case :

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

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

In this situation you want your string to be passed by value, but it is not. If str was mutable, thinger would change str, that would be a really strange effect.


As Cristian Sanchez mentioned, in javascript strings are immutable. Depending on the task we can try to work around with the following approaches:

 // **fastest** .split(...).join(...)
var string = 'My string'
string = string.split('string').join('thing')'with .split-.join', { string }) // 'My thing'

// **good old wine** .replace('...','...') as mentioned above
string = 'My string'
string = string.replace('string','thing')'with .replace', { string }) // 'My thing'

// **ES6 string interpolation**
string = (arg) => `My ${arg}`'with interpolation 1', { string: string('string') }) // 'My string''with interpolation 2', { string: string('thing') }) // 'My thing'

Note: there are fancy ways with such approaches as ..indexOf(...) and .substring(...), .charAt(...),


Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.