为什么delete关键字与预期相反?

Ran*_*lue 10 javascript google-chrome

在Chrome中,请在控制台中尝试以下操作.第一

console = 0;
Run Code Online (Sandbox Code Playgroud)

指定值0console.然后

console // (prints `0`)
Run Code Online (Sandbox Code Playgroud)

检查我们是否已正确覆盖console.最后,

delete console
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,console现在持有原始Console对象.实际上,delete关键字"resurected" console,而不是消灭它!

这是预期的行为吗?这在Chromium代码中实现了什么?

Ole*_*kov 12

MDN的文档中所述delete:

如果delete运算符成功,它将完全从对象中删除该属性,尽管这可能会在对象的原型上显示类似命名的属性.

delete通过原型链继承了简单的unhadows本地属性.

有些浏览器window继承了本机原型,如果你真的想知道那么多细节,你就会查看源代码以了解属性是如何继承的,但大多数它们的工作方式与JS自己的有关.