【问题标题】:Why does the delete operator deletes a function constructor?为什么 delete 运算符会删除函数构造函数?
【发布时间】:2021-12-30 21:25:05
【问题描述】:

In this post, 它说删除运算符不适用于函数。

删除操作符的调用在删除属性时返回 true,否则返回 false。它只对对象的属性有效,对变量或函数名没有影响。

但考虑一下这段代码:

delete Date;
new Date(); // thros an reference error

为了确保 Date 是一个函数构造函数,我写道:

typeof Date; // "function"

这段代码验证 Date 是构造函数,而不是对象。如果删除运算符适用于这种特定类型的函数构造函数,它也应该适用于我的构造函数。但事实并非如此。

function a(){}
var b = new a();
delete a; // false

所以,delete 运算符并没有删除我的函数构造函数,但由于某种原因,它删除了 Date 构造函数。有人能解开我的困惑吗?

【问题讨论】:

标签: javascript


【解决方案1】:

如果您在浏览器上下文中执行此操作,则 Datewindow 上的属性,这是您实际删除的内容。该属性的值是构造函数/函数并不重要,该属性已消失,很可能这是您对该函数的唯一引用。

这仍然有效并返回一个日期对象。

var dateFn = Date;
delete Date;
new dateFn();

因为它只是被删除的属性,而不是实际的功能。

【讨论】:

  • 随后(关闭循环),delete dateFn 返回 false - 对变量或函数名称没有影响部分。
  • @Toby——因为 window 对象的 Date 属性已被删除,而不是 Date 函数/对象本身。您可能不知道原语和对象之间的区别,请参阅object vs. primitive,阅读多个答案。
  • @Karl-Johan Sjögren,Date 属性在窗口对象中,而不是在窗口中。 console.log(Window.Date)// 返回未定义。
  • @Toby 以后,当您看到明显的拼写错误时,请随时进行编辑。
  • @VLAZ,到时候不让我;它只是给我这个消息:“建议的编辑队列已满”。
猜你喜欢
  • 2015-10-19
  • 2011-05-21
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 2016-02-15
相关资源
最近更新 更多