我不太了解这里发生的事情,不胜感激指出我的假设中的缺陷:
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' }
所以问题是,为什么需求主体的值会发生变化?这是因为我们指向该对象而不是创建新对象吗?
答案 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总是按值传递,但是当变量引用对象(包括数组)时,“值”就是对对象的引用。”