删除对象属性在删除操作之前有效

时间:2013-12-13 20:20:21

标签: javascript

我有这段代码:

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 =“”取决于我所在的实验)

有人可以帮我理解发生了什么吗?

1 个答案:

答案 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