我有这段代码:
data["id"] = 0;
console.log(data); // first log
found["test"] = data;
delete data.id;
console.log(data); // second log
其中data和found是之前创建的对象。
我的控制台打印两次没有“id”属性的数据对象。
如果我用以下内容替换删除:data.id = '';
,控制台会打印两次具有空id属性的数据对象。
同样,found["test"]
的对象没有id(或id =“”取决于我所在的实验)
有人可以帮我理解发生了什么吗?
答案 0 :(得分:4)
console.log
正在欺骗你。变量data
保持不变。变量data
引用的对象正在发生变化。当您点击它时,您的日志将显示该对象的状态,而不是在记录时。
并不是delete
提前发生,而是您的浏览器控制台太晚打开了对象。
如果您插入debugger
语句来暂停执行,您应该会看到您希望看到的内容。然后继续执行,该属性将按预期删除。
data["id"] = 0;
console.log(data); // first log
debugger;
// inspect your object now
found["test"] = data;
delete data.id;
console.log(data); // second log
// inspect the object now, the property should be gone
O您可以通过钻取对象来更改您记录的内容:
data["id"] = 0;
console.log(data.id); // 0
found["test"] = data;
delete data.id;
console.log(data.id); // undefined