我确定我做错了什么,但我不确定它是什么。我希望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);
答案 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' |
+-----------------+ +----------------------------+
因此,通过data
或req.query
对对象的任何更改也将反映在所有其他引用上。它更像是使用两个不同的名称访问同一个对象。
根据这种理解,如果我们查看您的代码,当您从data
删除内容时,实际上是从req.query
引用的对象中删除。
如果您不希望发生这种情况,则需要使用this thread中提到的任何方法克隆req.query
。