为什么"undefined equals false"返回false?

abd*_*ziq 42 javascript

当我将undefined和null与Boolean false进行比较时,该语句返回false:

undefined == false;
null == false;
Run Code Online (Sandbox Code Playgroud)

它返回false.为什么?

My *_*eth 35

由于原始答案指向要删除的规范,我想在此处提供链接和简短的摘录.

http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3

ECMA规范文档列出了undefined == false返回false 的原因.虽然它没有直接说明为什么会这样,但回答这个问题最重要的部分在于这句话:

The comparison x == y, where x and y are values, produces true or false.

如果我们查找null的定义,我们会发现如下:

NULL or nil means "no value" or "not applicable".

在Javascript中,undefined以同样的方式对待.它没有任何价值.但是,false确实有价值.它告诉我们事情并非如此.鉴于undefined并且null不应该给我们任何价值.同样,它没有什么可以转换为它的抽象相等比较,因此结果总是错误的.这也是为什么null == undefined返回true(它们都没有任何价值)的原因.应该注意的是,null === undefined由于它们的类型不同而返回false.(使用typeof(null)typeof(undefined)在控制台中查看)

但我很好奇的是,NaN与任何东西相比,总是会返回假的.即使将它与自身进行比较.[ NaN == NaN返回false]

另外,另一个奇怪的信息:[ typeof NaN返回"数字"]


严格平等

如果可能,您应该避免使用==运算符来比较两个值.而是使用===来真正看出两个值是否相等.==给出一种错觉,即当两个值可能不是通过使用强制时,它们确实完全相同.例子:

5 == "5" 是真的

5 === "5" 是假的

"" == false 是真的

"" === false 是假的

0 == false 是真的

0 === false 是假的


asa*_*lla 0

所以未定义实际上意味着未定义。非 False、非 True、非 0、非空字符串。因此,当您将 undefined 与任何内容进行比较时,结果始终为 false,它不等于那个。

  • `undefined == null` 是正确的。 (12认同)
  • 在 JavaScript 中尽可能使用 ===。== 给人一种错觉:两个值实际上完全相等,但实际上它们可能并不相等。(5 ==“5”为真。5 ===“5”为假。) (3认同)
  • 哇,@SLaks。看来是这样,我很惊讶,也有点失望。仔细阅读,发现这是因为“==”运算符可以在两者之间进行强制转换。同意 Xander 的观点,即“= =”不起作用,对我来说更“直观”。很高兴你长大了,今天我自己也学到了一些东西! (2认同)