javascript删除关键字无法正常工作

javascript删除关键字无法正常工作,javascript,Javascript,这真的很奇怪,我想,这个json是通过http发送的 { "foo":"bar", "foo2":"bar2", "name":{ "firstName":"Joff", "middleName":"Ramirez", "lastName":"Tiquez" } } 在服务器上,我正在执行以下命令: var data = req.body; // the json from http console.log('data', da

这真的很奇怪,我想,这个json是通过http发送的

{
   "foo":"bar",
   "foo2":"bar2",
   "name":{
       "firstName":"Joff",
       "middleName":"Ramirez",
       "lastName":"Tiquez"
   }
}
在服务器上,我正在执行以下命令:

var data = req.body; // the json from http
console.log('data', data); // the data now has the req.body's value 
delete data.name; // <-- here's the delete
console.log('data', data); // the name object will obviously be deleted
console.log('req.body', req.body); // the name on the req.body was deleted too. Wtf?

因此,当我试图在程序的其他部分使用req.body.name时,该名称现在不见了。删除就是这样工作的吗

是的。Delete关键字删除实例本身的属性


编辑:对象通过引用传递。考虑复制对象,所以所做的更改只会影响正在更改的对象。

< P>是的。Delete关键字删除实例本身的属性


编辑:对象通过引用传递。考虑复制对象,所以所做的更改只会影响正在更改的对象。

删除就是这样工作的吗

对。删除从对象中删除属性

…但这不是你困惑的根源

赋值运算符复制req.body的值,该值是对对象的引用,JS只会向您提供对要使用的对象的引用

将该引用复制到数据时,有两个引用指向同一对象。从对象中删除属性时,该属性将从对象中删除,并且使用哪个对象引用并不重要

有关制作对象的深度副本的一些信息,请参见

var data = JSON.parse(JSON.stringify(req.body));
delete data.name; // <-- here's the delete
删除就是这样工作的吗

对。删除从对象中删除属性

…但这不是你困惑的根源

赋值运算符复制req.body的值,该值是对对象的引用,JS只会向您提供对要使用的对象的引用

将该引用复制到数据时,有两个引用指向同一对象。从对象中删除属性时,该属性将从对象中删除,并且使用哪个对象引用并不重要

有关制作对象的深度副本的一些信息,请参见

var data = JSON.parse(JSON.stringify(req.body));
delete data.name; // <-- here's the delete

正如@Dellirium所指出的,对象是通过引用传递的,reqBody是与数据相同的对象


正如@Dellirium所指出的,对象是通过引用传递的,reqBody是与数据相同的对象

如果要以相同的方式删除,则需要将数据保存在其他变量1 x 1对象中

因为当您使用任何对象在其他对象中赋值时,则通过引用赋值。欲了解更多信息,请查看-


对于您的问题解决方案,将值1乘以1。

如果要以相同方式删除,则需要将数据保存在其他变量1乘以1对象中

因为当您使用任何对象在其他对象中赋值时,则通过引用赋值。欲了解更多信息,请查看-


对于您的问题解决方案,将值1乘以1。

对象通过引用传递,reqBody是与dataWhyTH down表决相同的对象?哈哈,这是个很有道理的问题。lol@Dellirium你所说的通过引用传递是什么意思?所以,当我将req.body传递给数据时,我没有创建新对象吗?哇,我的一生都是谎言。谢谢大家!这真是令人兴奋。LOL将变量的值设置为对象时,所做的是设置指向内存中某个位置的指针。因此,如果您有一个对象,并且您将reqBody设置为该对象,那么您只是在复制地址。然后,稍后将地址复制到数据中。之后,您访问数据并从该地址删除名称,但reqBody仍在引用内存中的同一位置。内存中只有1个对象,2个变量各自持有相同的地址,对象对象通过引用传递,reqBody是与dataWhyTH down表决相同的对象吗?哈哈,这是个很有道理的问题。lol@Dellirium你所说的通过引用传递是什么意思?所以,当我将req.body传递给数据时,我没有创建新对象吗?哇,我的一生都是谎言。谢谢大家!这真是令人兴奋。LOL将变量的值设置为对象时,所做的是设置指向内存中某个位置的指针。因此,如果您有一个对象,并且您将reqBody设置为该对象,那么您只是在复制地址。然后,稍后将地址复制到数据中。之后,您访问数据并从该地址删除名称,但reqBody仍在引用内存中的同一位置。您的内存中只有1个对象,2个变量各自拥有该对象的相同地址,感谢您添加了替代解决方案:感谢您添加替代解决方案:
console.log('req.body', req.body); // This won't be deleted.