我下面有一个文本替换功能,
function msgConstructor(type, language, withUserName, userName) {
var txtAndPayloadType = {}
switch (language) {
case Enums.DeviceLanguages.tr:
txtAndPayloadType = Dictionary.tr.notifications[type]
break;
case Enums.DeviceLanguages.en:
default:
txtAndPayloadType = Dictionary.en.notifications[type]
break;
}
txtAndPayloadType.text = txtAndPayloadType.text.replace('[userName]', userName).replace('[withUserName]', withUserName)
return txtAndPayloadType;
}
我正在将字典中的值获取到单独的变量,但不知何故,对其文本的 .replace 调用会影响字典中的值。我认为这与原型(prototype)水平有关。我怎样才能真正将字典中的值复制到新的变量中?
最佳答案
当你像这样创建一个对象时:
var a = { a: 1 };
var b = a;
a
仅引用 b
。无论您随后更改 a
或 b
中的属性,您正在更新的都是同一个对象。
b.a = 2;
console.log(a.a); // Outputs 2
console.log(b.a); // Outputs 2
console.log(a === b); // Outputs true
它不适用于字符串:
var a = "a";
var b = a;
b = "b";
console.log(a); // Outputs "a"
console.log(b); // Outputs "b"
console.log(a === b); // Outputs false
您可以做的只是复制包含字符串的 text
属性:
var newText;
switch (language) {
case Enums.DeviceLanguages.tr:
newText = Dictionary.tr.notifications[type].text;
break;
case Enums.DeviceLanguages.en:
default:
newText = Dictionary.en.notifications[type].text;
break;
}
return {
text: newText
.replace('[userName]', userName)
.replace('[withUserName]', withUserName)
};
关于javascript - string.replace 替换引用字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36739371/