假设我obj1只有可枚举的属性:
var obj1 = { a: 1, b: 2, c: 3 };
Run Code Online (Sandbox Code Playgroud)
然后我创建obj2一个包含对以下内容的引用obj1:
var obj2 = obj1;
obj1 === obj2; // true
Run Code Online (Sandbox Code Playgroud)
在某些时候,我想重置obj1为空对象:
for (key in obj1) {
delete obj1[key];
}
obj1 === obj2; // true
Run Code Online (Sandbox Code Playgroud)
但我想避免迭代所有属性:
obj1 = {};
obj1 === obj2; // false (this obviously doesn't work)
Run Code Online (Sandbox Code Playgroud)
还有其他解决方案吗?
如果您对数据模型有灵活性,则将实际属性存储在子对象中:
var obj1 = {theData: { a: 1, b: 2, c: 3} };
Run Code Online (Sandbox Code Playgroud)
然后您可以使用 重置属性obj1.theData = {}。
当然,这意味着对任何属性的访问都会产生额外的“跳跃”,因此根据您访问数据(读取或写入)与重置对象的频率,您可能最好保留delete。
除此之外,我不相信您可以像重置数组一样重置对象(通过a.length=0)。