以下显示"0"在Javascript 中为false:
>>> "0" == false
true
>>> false == "0"
true
Run Code Online (Sandbox Code Playgroud)
那么为什么以下打印"ha"?
>>> if ("0") console.log("ha")
ha
Run Code Online (Sandbox Code Playgroud) 我只是在研究OCPJP问题,我发现了这个奇怪的代码:
public static void main(String a[]) {
System.out.println(Double.NaN==Double.NaN);
System.out.println(Double.NaN!=Double.NaN);
}
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,我得到了:
false
true
Run Code Online (Sandbox Code Playgroud)
false当我们比较两个看起来彼此相同的东西时,输出结果如何?什么NaN意思?
JS中的这段代码给了我一个弹出窗口,说"我认为null是一个数字",我觉得有点令人不安.我错过了什么?
if (isNaN(null)) {
alert("null is not a number");
} else {
alert("i think null is a number");
}Run Code Online (Sandbox Code Playgroud)
我正在使用Firefox 3.这是一个浏览器错误吗?
其他测试:
console.log(null == NaN); // false
console.log(isNaN("text")); // true
console.log(NaN == "text"); // falseRun Code Online (Sandbox Code Playgroud)
那么,问题似乎不是与NaN的精确比较?
编辑:现在问题已经得到解答,我已经清理了我的帖子,以便为存档提供更好的版本.然而,这使得一些评论甚至一些答案有点难以理解.不要责怪他们的作者.我改变的事情包括:
我有一个庞大,凌乱的JS代码库.有时,在使用应用程序时,变量设置为NaN.由于x = 2 + NaN结果x被设定为NaN,NaN以病毒传播.在某种程度上,在它传播到很远之后,用户注意到整个地方都有NaN,并且狗屎通常不再起作用.从这种状态来看,我很难回溯并识别NaN的来源(并且很可能有多个来源).
NaN bug也不容易重现.尽管有数百人观察并报告给我,但没有人能告诉我一系列导致NaN出现的步骤.也许这是一种罕见的竞争条件.但它绝对是罕见的,而且起源不确定.
我该如何解决这个错误?有任何想法吗?
我想到的两个愚蠢的想法,这可能是不可行的:
编写某种预处理器,isNaN在每次使用任何变量之前插入检查并记录第一次出现的NaN.我不认为以前这样做过,我不知道会有多难.任何意见,将不胜感激.
在JS引擎中运行我的代码,该引擎能够在任何变量设置为NaN时设置断点.我认为没有任何东西可以开箱即用,但将它添加到Firefox或Chrome有多难?
我觉得我不应该是第一个遇到这类问题的人,但我找不到其他人在谈论它.
在 Javascript 中,如果我们将字符串与数字相乘,我们会得到NaN:
console.log("manas" * 5); // result is NaN
Run Code Online (Sandbox Code Playgroud)
那么为什么下面的代码会产生false而不是true?
console.log("manas" * 5 == NaN) // results false
Run Code Online (Sandbox Code Playgroud) 我坚持下面提到的这种特殊情况.有人可以向我解释下列行为的原因是什么.
Infinity - Infinity结果为何NaN, but NaN === (Infinity-Infinity)结果false如何?