Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么null==undefined在javascript中为true_Javascript - Fatal编程技术网

为什么null==undefined在javascript中为true

为什么null==undefined在javascript中为true,javascript,Javascript,如果我们发出警报(null==未定义)它将输出到true 这其中的逻辑原因是什么 这是用javascript硬编码的东西还是对此有解释。原因与0==“0”-javascript是松散类型的-如果某个东西可以转换为其他东西,则除非您使用=== alert(null===undefined); 会给你假的 至于为什么会发生这些特殊的转换,答案很简单,“规范说应该发生这种情况”。对于编程语言为何以某种方式运行,除了“因为它这么说”之外,不需要其他理由 编辑:稍微好一点的答案-在Javascript中

如果我们发出
警报(null==未定义)
它将输出到
true

这其中的逻辑原因是什么


这是用javascript硬编码的东西还是对此有解释。

原因与
0==“0”
-javascript是松散类型的-如果某个东西可以转换为其他东西,则除非您使用===

alert(null===undefined);
会给你假的

至于为什么会发生这些特殊的转换,答案很简单,“规范说应该发生这种情况”。对于编程语言为何以某种方式运行,除了“因为它这么说”之外,不需要其他理由

编辑:稍微好一点的答案-在Javascript中,某些对象/值在转换为布尔值时是“truthy”或“false”。0(整数零)、“0”(字符串中的零字符)、“”(空字符串)均为false。如果没有更好的比较可以使用,则应用布尔运算


这就是为什么“0”不等于空字符串,但“0”和“”都等于false的原因。

语言规范:

如果x为null而y未定义,则返回true

我不知道有任何语言设计过程的记录可以解释这个决定的原因,但是
=
有处理不同类型的规则,“null”和“undefined”都是“nothing”的意思,所以让它们相等是很直观的


(如果您不想修改类型,请改用
=

使用双相等运算符强制Javascript执行类型强制

换句话说,当您执行
x==y
时,如果
x
y
不是同一类型,JavaScript将在比较之前将一个值转换为另一个值,就像比较字符串和数字一样,字符串总是转换为一个数字,然后进行比较

由于这个原因,JavaScript中混合类型的许多比较可能会导致意外或违反直觉的结果

如果要在JavaScript中进行比较,通常最好使用三重相等运算符
===
,而不是双相等运算符。这不会执行类型强制;相反,如果类型不同,则返回false。这通常是你需要的


只有在绝对确定需要时才应使用double equal。

比较运算符不检查类型
null
undefined
都返回
false
。这就是为什么您的代码实际上正在检查
false
是否等于
false

> null == undefined;
< true
> false == false
< true


是的…你能给我指一些材料,其中说明了原因是什么,而不仅仅是它是相等的:PI会说,因为undefined意味着什么也没有,如果你的div没有ID,它是undefined的,或者我们可以说,nonexistant,null,void.你能解释一下==操作符在比较未定义和空时的实际操作方式吗?如果要获得完整的解释和完整的规则集,请检查以下内容:答案,
它只生成布尔值,正如昆廷的回答所解释的,需要检查的数据的数字或字符串是不正确的
null
undefined
没有转换为其他类型,它们有自己的规则。@Ashburaczenko现在更新了我的答案。又一次否决投票。。。请解释一下,如果你投了反对票,为什么会这样。我在这里是想帮忙,不是想失去名声。这仍然是错误的。它不检查
false
等于
false
,这一位很难理解。阅读昆汀的答案。它没有说明
false==false
null==undefined
相同。它只显示
false==false
也返回
true
。例如
!!未定义的
!!null
两者都返回
false
。您能解释一下什么被转换成了什么吗?因为语言规范说应该这样做。除了“文档上说是这样”之外,不需要其他理由。它是核心语言的一部分。告诉我一件事……当我们使用==时,类型被设置为相等,然后检查是否相等,对吗?undefined的类型是undefined,null的类型是object,那么object==undefined???“当我们使用==类型相等时”-不(至少,不总是),请查看我答案第一行上的链接。你能检查Spudley的答案并解释我。。。。我对未定义和null的类型强制感到困惑:(规范链接是纯金的,谢谢,不要再争论你喜欢javascript的方式了,去读文档吧。这应该是最好的答案。很好的解释!在javascript中,==”应用了类型强制。“null”和“未定义”都是“错误的”原语。让我们希望这有助于推动逻辑回家!这听起来可能很愚蠢,但当null==未定义时,这两个类型中的哪一个是强制转换为另一个?
> typeof undefined;
< "undefined"
> typeof null;
< "object"
> undefined === null;
< false