鉴于此脚本:
var number = NaN;
if (!number) {
alert("yes");
}
alert(number == false);
为什么第一个表达式`!number
的计算结果为true,而第二个表达式number == false
的计算结果为false?
答案 0 :(得分:5)
看看这篇文章: http://www.smashingmagazine.com/2011/05/30/10-oddities-and-secrets-about-javascript/
有一些关于javascript的技巧,包括关于NaN的信息:
NaN是一个数字
你认为null是一个对象是荒谬的?尝试处理NaN的想法 - “不是数字” - 是一个数字!而且,NaN被认为不等于它自己!你的头疼吗?
alert(typeof NaN); //alerts 'Number'
alert(NaN === NaN); //evaluates false
事实上,NaN并不等于任何东西。确认某些东西是NaN的唯一方法是通过函数isNaN()。
答案 1 :(得分:3)
x == y
定义为(11.9.3):
如果x NaN ,则返回 false 。
!
首先调用ToBoolean
(9.2)(然后返回相反的内容):
如果参数为+ 0,-0或 NaN ,则结果为 false ;否则结果是真的
答案 2 :(得分:2)
要评估变量是NaN(不是数字),请考虑使用isNaN(number)
。它会给你正确答案。
答案 3 :(得分:2)
来自维基百科 - JavaScript syntax, boolean:
在逻辑上下文中使用时,0,-0,null,NaN,undefined和空字符串(“”)由于自动类型强制而评估为false。
!NaN == true
因此,当NaN被强制转移到false
时,!NaN
评估为true
。
但是,NaN
不等于false
- 它是不同的类型/值。