【发布时间】: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 构造函数。有人能解开我的困惑吗?
【问题讨论】:
-
文章说“它只对对象的属性有效,对变量或函数名没有影响。”。您误解了这一点:区别不在于函数和非函数。区别在于属性和变量。函数声明的行为类似于变量。
Date是window上的属性。见delete、JavaScript Variables vs Properties、Is there any difference between a global variable and a property of the Global Object。
标签: javascript