为什么Chrome调试器跳过了删除语句?

9
为什么Chrome调试器会跳过delete语句?在控制台中运行以下代码可以证明这一点。
(function () {
  var foo = { bar: true };
  debugger;
  delete foo.bar;
})();

1
这太奇怪了,我以前从没注意到。它确实会跳过创建对象变量 var foo = {} 的语句,所以它也应该跳过 delete 语句。但是我找不到任何解释。 - sublime
2
之前有人在V8上提交了一个bug,但是还没有得到任何回应。 - Qantas 94 Heavy
2
查看这个关于 delete算法。有趣的是,调试器确实会在某些其他的 delete 场景(比如 delete foo)中停止。 - 0not
1个回答

1
这里的答案涉及到命令“delete”的性质,它不像你在js中习惯的常见函数。我猜测chrome工具被设置为在包含对象定义或调用方法的每一行停止,几乎所有在javascript中遇到的东西都是对象,但是delete不是一个对象,而是像“+”或“-”一样的运算符。它被跳过的原因是这将是唯一一次你会有一行既不抛出错误也不定义或调用对象的情况。

1
在严格模式下,对于不可配置的属性使用 delete 会引发错误。 - Mike Samuel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接