无法确定undefined()的类型

时间:2017-07-18 03:34:53

标签: javascript

最近我研究了一个程序员无意中将undefined传递给addEventListener的情况,因此:

window.addEventListener('load', undefined);

没有抛出任何错误。好像JavaScript愿意调用undefined。但是世界上是什么 undefined()?我尝试过各种各样的事情,例如:

console.log(undefined() === null);
console.log(typeof undefined());

但我从未得到任何回报。

为了清晰起见添加了编辑:我的原始问题是基于错误,因为我没有设置我的开发人员工具来将错误记录到控制台。以上两个命令(但不是对addEventListener的调用)会在浏览器中抛出错误,如下面的答案和评论所示。

4 个答案:

答案 0 :(得分:2)

  

好像JavaScript愿意调用undefined

不,addEventListener is specified to ignore nullwhich JavaScript’s undefined is converted to。永远不会调用undefined

进一步证明JavaScript不愿意在浏览器中调用undefined

> undefined()
Uncaught TypeError: undefined is not a function
    at <anonymous>:1:1

答案 1 :(得分:0)

它将返回:

  

未定义不是函数

&#13;
&#13;
console.log(typeof undefined());
&#13;
&#13;
&#13;

如果在浏览器上运行它,它将返回undefined而不是函数。与作为对象的null不同,未定义没有任何值。

答案 2 :(得分:0)

null意味着某些东西存在,但被告知它没有任何价值。 undefined表示事物没有给出值,通常是因为它没有被声明/初始化。

在Javascript中,undefined是一个原语。这是假的,所以如果在条件中使用它,它会评估为False

Javascript不是强类型语言,因此在调用回调函数 之前,没有任何内容可以检查。事实上,Javascript并不关心传递了多少个参数或者它们的类型是什么,在调用函数时,所有参数都被放入,并且由函数决定如何处理参数。

例如,在许多可枚举的方法中,它们会传回给您(index, value, array)。如果您的函数查找这些值或为它们分配临时变量并不重要,它们仍然会被传递。 a.forEach(function(index){}) and a.forEach(function(){})实际上都可以访问所有提到的3个变量。

答案 3 :(得分:0)

您可以执行以下操作来查找传递参数的类型:

var myVar;

Object.prototype.toString.call(myVar);

它将返回"[object Undefined]"

对于其他用例,例如if myVar是一个字符串,如下所示:

var myVar = 'It is a string';
Object.prototype.toString.call(myVar);

它会退回"[object String]"