相关疑难解决方法(0)

在JavaScript中,为什么"0"等于false,但是当'if'测试时它本身并不是假的?

以下显示"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)

javascript boolean

224
推荐指数
6
解决办法
16万
查看次数

为什么Double.NaN == Double.NaN返回false?

我只是在研究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意思?

java floating-point scjp nan ocpjp

154
推荐指数
5
解决办法
6万
查看次数

为什么JS中的isNaN(null)== false?

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"); // false
Run Code Online (Sandbox Code Playgroud)

那么,问题似乎不是与NaN的精确比较?

编辑:现在问题已经得到解答,我已经清理了我的帖子,以便为存档提供更好的版本.然而,这使得一些评论甚至一些答案有点难以理解.不要责怪他们的作者.我改变的事情包括:

  • 删除了一条说明,说我首先通过恢复其含义搞砸了标题
  • 早期的答案显示我没有明确说明为什么我认为这种行为很奇怪,所以我添加了检查字符串并进行手动比较的示例.

javascript

117
推荐指数
5
解决办法
5万
查看次数

检测大型JS程序中的任何变量何时设置为NaN

我有一个庞大,凌乱的JS代码库.有时,在使用应用程序时,变量设置为NaN.由于x = 2 + NaN结果x被设定为NaN,NaN以病毒传播.在某种程度上,在它传播到很远之后,用户注意到整个地方都有NaN,并且狗屎通常不再起作用.从这种状态来看,我很难回溯并识别NaN的来源(并且很可能有多个来源).

NaN bug也不容易重现.尽管有数百人观察并报告给我,但没有人能告诉我一系列导致NaN出现的步骤.也许这是一种罕见的竞争条件.但它绝对是罕见的,而且起源不确定.

我该如何解决这个错误?有任何想法吗?

我想到的两个愚蠢的想法,这可能是不可行的:

  1. 编写某种预处理器,isNaN在每次使用任何变量之前插入检查并记录第一次出现的NaN.我不认为以前这样做过,我不知道会有多难.任何意见,将不胜感激.

  2. 在JS引擎中运行我的代码,该引擎能够在任何变量设置为NaN时设置断点.我认为没有任何东西可以开箱即用,但将它添加到Firefox或Chrome有多难?

我觉得我不应该是第一个遇到这类问题的人,但我找不到其他人在谈论它.

javascript debugging nan

5
推荐指数
1
解决办法
900
查看次数

比较 JavaScript 中的 NaN

在 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)

javascript

2
推荐指数
1
解决办法
539
查看次数

为什么Infinity-Infinity NaN?

我坚持下面提到的这种特殊情况.有人可以向我解释下列行为的原因是什么.

Infinity - Infinity结果为何NaN, but NaN === (Infinity-Infinity)结果false如何?

javascript

-1
推荐指数
1
解决办法
692
查看次数

标签 统计

javascript ×5

nan ×2

boolean ×1

debugging ×1

floating-point ×1

java ×1

ocpjp ×1

scjp ×1