我对JavaScript的delete
运算符有些困惑。采取以下代码:
var obj = {
helloText: "Hello World!"
};
var foo = obj;
delete obj;
执行完这段代码后,obj
is null
,但foo
仍指与完全相同的对象obj
。我猜这个对象是foo
指向相同的对象。
这使我感到困惑,因为我希望写操作可以delete obj
删除obj
指向内存中的对象,而不仅仅是变量obj
。
这是因为JavaScript的垃圾回收工作在保留/释放的基础,所以,如果我没有指向对象的任何其他变量,它 会 从内存中清除?
(顺便说一下,我的测试是在Safari 4中完成的。)
delete运算符仅删除引用,而不删除对象本身。如果确实删除了对象本身,则其他剩余的引用将像C
++删除一样悬而未决。(访问其中之一将导致崩溃。将它们全部变为null意味着删除时需要额外的工作或为每个对象额外的内存。)
由于Javascript是垃圾收集的,因此您无需删除对象本身-当无法再引用它们时,它们将被删除。
完成对对象的引用后,删除它们可能很有用,因为这为垃圾回收器提供了有关可以回收的内容的更多信息。如果对大型对象的引用仍然存在,则可能导致该对象无法回收-
即使程序的其余部分实际上并未使用该对象。
问题内容: 如何从数组中删除对象?我想删除,其中包括名称的对象从。例如: 我要实现: 问题答案: 您可以使用多种方法从数组中删除项目: 如果要删除position处的元素,请使用: 要么 您可以使用或结合使用参见MDN从数组中删除一个或多个元素,例如
问题内容: 如何删除JavaScript对象中或JavaScript对象中的所有属性? (问题与此数组类似) 问题答案: 您可以遍历对象: 如果您担心此属性删除不会使对象的proptype链运行起来,则还可以: 有关null与未定义的一些注意事项:
问题内容: 说我创建一个对象,如下所示: 删除该属性以使其最终成为new 的最佳方法是什么? 问题答案: 像这样: 演示版
问题内容: 假设我有一个这样的架构: 如果删除一个人,那么仍然存在孤立的作业,这些作业引用了一个不存在的人,这在数据库中造成了混乱。 有没有一种简单的方法来确保删除一个人时,对该人的所有相应引用也将被删除? 问题答案: 您可以在架构上添加自己的Mongoose 中间件,以将该人从引用该人的所有其他文档中删除。在中间件功能中,就是要删除的文档。
问题内容: 假设我们有一个具有这种格式的对象: 我想做一个通过键删除的函数: 问题答案: 该运算符允许您从对象中删除属性。 以下示例都做同样的事情。
当执行进入非Reps.remove行时,删除不是删除指定索引处的对象。为什么? 此解决方案打印:[a, b, c, d, e, f]当它应该是b, d, f时