Ответ 1
Нет, строки в JavaScript неизменяемы.
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"
Есть ли другой способ, который я могу использовать, помимо замены, который изменит строку на месте, не давая мне новый объект строки?
Нет, строки в JavaScript неизменяемы.
Не то, что я знаю, однако, если причина, по которой вы хотите это сделать, - просто сохранить свой код в чистоте, вы можете просто назначить новую строку старой переменной:
var string = "This is a string";
string = string.replace("string", "thing");
Конечно, это просто заставит код выглядеть чище и все равно создать новую строку.
Есть причина, почему строки неизменяемы. Поскольку Javascript использует технику "разворачивание по принципу обмена сообщениями", изменяемая строка будет проблемой в этом случае:
function thinger(str) {
return str.replace("string", "thing");
}
var str = "This is a str";
var thing = thinger(str);
В этой ситуации вы хотите, чтобы ваша строка передавалась по значению, но это не так. Если str была изменчивой, вещь изменила бы str, это было бы действительно странным эффектом.