给变量赋值后主体需要更改值

时间:2018-08-08 16:18:22

标签: javascript node.js express

我不太了解这里发生的事情,不胜感激指出我的假设中的缺陷:

 putUser: async (req, res, next) => {
        console.log('test1', req.body)
        let data = req.body
        data["local.password"] = 'xd121244212141243'
        console.log('test2', data)
        console.log('test3', req.body)

此代码块产生的结果为:

test1 { 'local.username': 'name','local.password': 'passwordToChange' }
test2 { 'local.username': 'name','local.password': 'xd121244212141243' }
test3 { 'local.username': 'name','local.password': 'xd121244212141243' }

所以问题是,为什么需求主体的值会发生变化?这是因为我们指向该对象而不是创建新对象吗?

3 个答案:

答案 0 :(得分:0)

  

这是因为我们指向对象而不是创建新对象吗?

是的。

 let data = req.body

这会将对对象的引用从req.body复制到data,因此它们都是对相同对象的引用。要代替复制:

 let data = { ...req.body };

答案 1 :(得分:0)

您是正确的,数据和主体都指向内存中的同一位置。

您可以通过多种方式解决此问题,其中大多数参见this question

我认为适合您的具体情况的一种方法是

let data = JSON.parse(JSON.stringify(req.body))

尽管效率不是很高。

答案 2 :(得分:0)

是的,有关此S.O. post

Tl; dr:“ JavaScript总是按值传递,但是当变量引用对象(包括数组)时,“值”就是对对象的引用。