Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 覆盖对象属性(另一个对象):是否应删除旧对象?_Javascript - Fatal编程技术网

Javascript 覆盖对象属性(另一个对象):是否应删除旧对象?

Javascript 覆盖对象属性(另一个对象):是否应删除旧对象?,javascript,Javascript,假设我这样做: const x = { nestedObject: { propertyOne: "nested obj1", propertyTwo: "zzz" } }; 我想最终覆盖这个x.nestedObject——首先删除旧对象是更好的内存实践,还是无关紧要?例如: delete x.nestedObject; x.nestedObject = { propertyOne: "aaa",

假设我这样做:

const x = {
  nestedObject: {
     propertyOne: "nested obj1",
     propertyTwo: "zzz"
  }
};
我想最终覆盖这个x.nestedObject——首先删除旧对象是更好的内存实践,还是无关紧要?例如:

delete x.nestedObject;

x.nestedObject = {
   propertyOne: "aaa",
   propertyTwo: "bbb"
};

delete x.nestedObject行是不是更好的做法?

这真的不重要。如果在nestedObject中具有相同的属性,如property1、property2,则可以。如果要创建不同的属性,则始终可以将该属性指定为null

x.property1 = null;
x.newProperty = 'whatever'

通过这种方式,垃圾收集器收集垃圾,尽管它实际上只有在您使用大量属性或大量使用此对象时才会受益。

这真的不重要。如果在nestedObject中具有相同的属性,如property1、property2,则可以。如果要创建不同的属性,则始终可以将该属性指定为null

x.property1 = null;
x.newProperty = 'whatever'

通过这种方式,垃圾收集器可以收集垃圾,尽管它实际上只有在您使用大量属性或大量使用此对象时才有好处。

只要覆盖相同的键,就不需要删除任何内容

常数x={ 嵌套对象:{ propertyOne:嵌套对象J1, 物业二:zzz } }; console.logx; x、 嵌套对象={ 物业一:a, 物业2:b }
console.logx,“覆盖后” 只要覆盖相同的键,就不需要删除任何内容

常数x={ 嵌套对象:{ propertyOne:嵌套对象J1, 物业二:zzz } }; console.logx; x、 嵌套对象={ 物业一:a, 物业2:b }
console.logx,“覆盖后” 记忆方面没有什么区别

如果嵌套对象未在其他位置引用,则一旦重新分配属性,它将成为垃圾,垃圾收集器将在下次运行时回收内存。如果删除该属性,也会发生同样的情况

只有在不打算重新分配属性或变量并且需要回收其内容所使用的内存时,才需要删除属性或变量。这通常仅在内容较大或您有许多内容(例如,大量对象)时才重要


如果以后要重新分配属性,最好是为属性分配null,而不是删除它,这样在调试时可以将空属性视为占位符。

在内存方面没有区别

如果嵌套对象未在其他位置引用,则一旦重新分配属性,它将成为垃圾,垃圾收集器将在下次运行时回收内存。如果删除该属性,也会发生同样的情况

只有在不打算重新分配属性或变量并且需要回收其内容所使用的内存时,才需要删除属性或变量。这通常仅在内容较大或您有许多内容(例如,大量对象)时才重要


如果以后要重新分配属性,最好是为属性分配null,而不是删除它,这样在调试时可以将空属性视为占位符。

无所谓。不要过早地优化,这没关系。不要过早地进行优化。只有当您不打算很快重新分配属性或变量时,才需要删除属性或变量。我甚至想说,只有当您不需要属性出现在对象上时,才需要删除属性。假设内存是一个问题,可以通过执行obj.prop=null使一个人引用的对象符合GC的条件。它还作为属性通常应该存在的标记。@VLAZ删除它还有一个额外的好处,即显示对象不会显示未使用的属性。是的,这就是为什么如果您不再需要该属性,我建议您这样做的原因。如果该属性通常应该存在,但稍后将在应用程序中重新分配,那么将其标记为null似乎更合适。如果你不再需要它——它不会被重新分配,或者至少不会被明确地分配,也不会很长一段时间,那么就删除它。只有当你不打算很快重新分配它时,才需要删除属性或变量。我甚至会说,如果你不需要属性出现在对象上,你只需要删除它们。假设内存是一个问题,可以通过执行obj.prop=null使一个人引用的对象符合GC的条件。它还作为属性通常应该存在的标记。@VLAZ删除它还有一个额外的好处,即显示对象不会显示未使用的属性。是的,这就是为什么如果您不再需要该属性,我建议您这样做的原因。如果该属性通常应该存在,但稍后将在应用程序中重新分配,那么将其标记为null似乎更合适。如果你不再需要它了——它不会被重新分配,或者至少不会确定,也不会很长时间,那么就把它删除。