javascript - string.replace 替换引用字符串

标签 javascript

我下面有一个文本替换功能,

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。无论您随后更改 ab 中的属性,您正在更新的都是同一个对象。

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/

相关文章:

javascript - 为什么 $(document).scrollTop() 不等于文档底部的 $(document).height() ?

javascript - “历史”、无限制全局变量和 window.history

javascript - jQuery 是否在内部将 HTML5 数据属性键转换为小写?

javascript - 在 javascript 中的嵌入式 SVG 元素上添加点击事件

Javascript:确定字符串中的所有字符是否都是唯一的,如果不是,则删除重复的字符

调用对象属性的javascript语法

javascript - 需要一些 jquery if-else 语句帮助

javascript - 如何将 Backbone View 事件哈希定义为函数?

javascript - (JavaScript) 如何检查 JSON 中的 key

javascript - 使两个编辑器在自动增长时具有相同的大小