将变量值赋给另一个变量使其成为镜像

时间:2017-08-11 10:06:24

标签: javascript variables

我在节点应用程序中遇到了一些奇怪的问题。 如果我获取一个变量的内容并分配给另一个变量,它会以某种方式创建它们之间的链接,如果我更改第二个变量中的内容,它也会影响我从中获取内容的第一个变量。

这是我的服务器结构:

var body = {};

现在让我们填充正文:

body[_session] = {
    content: { /* some data here */ },
    sockets: []
};

然后在某些时候我这样做:

body[new_session] = {
    content: body[_session].content,
    sockets: []
};

此时,对new_session内容所做的更改也将在原始_session内容上进行。

我通过这样做解决了这个问题:

body[new_session] = {
    content: JSON.parse(JSON.stringify(body[_session].content)),
    sockets: []
};

但它似乎是昂贵的操作和可以避免的东西,我只是不知道如何,也许有人有一个想法,为什么它的发生以及如何解决它而不需要太多的努力。

1 个答案:

答案 0 :(得分:1)

这只是创建了一个引用,您需要将body[_session].content的属性正确复制到新对象。

如果您正在使用ES6,请尝试Object.assign

content: Object.assign({}, body[_session].content)

正如你在这里看到的那样:https://jsperf.com/object-assign-vs-iife - 它比stringify / parse方法快3.5倍,同时更具可读性。我已经包含了Mevia的解决方案,以表明它更快,但更冗长,更难以添加到现有的,结构良好的代码库。

否则,请从此处提出解决方案:How do I correctly clone a JavaScript object?