在Javascript中,如果我们将字符串与数字相乘,我们得到NaN
:
console.log("manas" * 5); // result is NaN
为什么以下代码会导致false
而不是true
?
console.log("manas" * 5 == NaN) // results false
答案 0 :(得分:4)
改为使用isNaN
功能。
console.log(isNaN("manas" * 5));
http://www.w3schools.com/jsref/jsref_isnan.asp
NaN,不是数字,是用于表示不可代表值的特殊类型值。使用JavaScript,NaN会引起一些混淆,从typeof和all开始到处理比较的方式。
结果可能会导致一些操作导致NaN。 因为有很多方法来表示NaN,所以有一个NaN不等于另一个NaN是有意义的。
答案 1 :(得分:1)
NaN
是一个特殊的数值,它不等于包括它自身在内的任何东西。要正确测试NaN
,您需要使用isNaN函数。
来自规范:
如果参数强制转换为NaN,则返回true,否则返回false。
以下是同一ECMAScript section:
的有用说明ECMAScript代码测试值X是否为NaN的可靠方式是
X !== X
形式的表达式。当且仅当X是NaN时,结果才为真。
答案 2 :(得分:0)
NaN将不等(通过==,!=,===和!==)与任何其他值(包括另一个NaN值)进行比较。使用Number.isNaN()或isNaN()可以最清楚地确定值是否为NaN。或者进行自我比较:NaN,只有NaN,将比较不等于自身。 Testing against NaN
答案 3 :(得分:0)
Javascript不是那么聪明 - 当==
运算符的任何一方都是Nan
时,整个事情的评估结果为false(类似于||
的左侧是{{1}的方式},它看起来并不困难)
因此,即使false
也会返回false。
这是关于楠行为的好文章
http://ariya.ofilabs.com/2014/05/the-curious-case-of-javascript-nan.html
答案 4 :(得分:0)
在Javascript中,
NaN == NaN //always results false.
(在javascript中,NaN与其自身的自我比较总是错误的)
参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN