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