删除对象属性在执行删除操作之前生效

Deleting an object property has effect before the delete action

本文关键字:删除 执行 对象 属性 操作      更新时间:2023-09-26

我有这样的代码:

data["id"] = 0;                                                     
console.log(data); // first log
found["test"] = data;
delete data.id;
console.log(data); // second log

其中数据和查找到的是以前创建的对象。

我的控制台打印两次没有"id"属性的数据对象。

如果我将delete替换为:data.id = '';,控制台将使用空id属性打印两次数据对象。

此外,found["test"]有一个没有id的对象(或id="的对象,取决于我在哪个实验中)

有人能帮我了解发生了什么吗?

console.log在捉弄你。变量data保持不变。变量data引用的对象正在发生变化。当你点击obejct时,你的日志会显示它的状态,而不是当它被记录时。

这并不是说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