当我将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 是假的
所以未定义实际上意味着未定义。非 False、非 True、非 0、非空字符串。因此,当您将 undefined 与任何内容进行比较时,结果始终为 false,它不等于那个。
| 归档时间: |
|
| 查看次数: |
36420 次 |
| 最近记录: |