最近我研究了一个程序员无意中将undefined
传递给addEventListener的情况,因此:
window.addEventListener('load', undefined);
没有抛出任何错误。好像JavaScript愿意调用undefined
。但是世界上是什么 undefined()
?我尝试过各种各样的事情,例如:
console.log(undefined() === null);
console.log(typeof undefined());
但我从未得到任何回报。
为了清晰起见添加了编辑:我的原始问题是基于错误,因为我没有设置我的开发人员工具来将错误记录到控制台。以上两个命令(但不是对addEventListener
的调用)会在浏览器中抛出错误,如下面的答案和评论所示。
答案 0 :(得分:2)
好像JavaScript愿意调用
undefined
。
不,addEventListener
is specified to ignore null
,which JavaScript’s undefined
is converted to。永远不会调用undefined
。
进一步证明JavaScript不愿意在浏览器中调用undefined
:
> undefined()
Uncaught TypeError: undefined is not a function
at <anonymous>:1:1
答案 1 :(得分:0)
它将返回:
未定义不是函数
console.log(typeof undefined());
&#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]"