Javascript - 引用数组删除对象

时间:2015-03-01 06:08:11

标签: javascript arrays

我确定我做错了什么,但我不确定它是什么。我希望req.query与开始时设置的相同,但是当我在结束时将它们记录到控制台时,req.query只包含rnd。

var req = {};
req.query = {
    url: 'https://google.com/',
    width: '500',
    height: '190',
    ref: 'http://domain.tld',
    rnd: '9314871930982'
};
var data = req.query;
delete data.width;
delete data.height;
delete data.url;
delete data.ref;

console.log(req.query);
console.log(data);

1 个答案:

答案 0 :(得分:1)

当你这样做时

var data = req.query;

您正在data引用req.query也引用的同一个对象。

+-----------------+                     +----------------------------+
|      data       |====================>| url:'https://google.com/'  |
+-----------------+                     | width: '500'               |
                                        | height: '190'              |
+-----------------+                     | ref: 'http://domain.tld'   |
|    req.query    |====================>| rnd: '9314871930982'       |
+-----------------+                     +----------------------------+

因此,通过datareq.query对对象的任何更改也将反映在所有其他引用上。它更像是使用两个不同的名称访问同一个对象。

根据这种理解,如果我们查看您的代码,当您从data删除内容时,实际上是从req.query引用的对象中删除。

如果您不希望发生这种情况,则需要使用this thread中提到的任何方法克隆req.query