根据 IEEE 754 NaN,与任何数字的相等比较都应该是错误的(Java 和 JavaScript 语言)。但是在下面的代码中,使用 JavaScript 的 javax scriptEngine,一个设置为 NaN 的变量与自身比较返回 true。
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Main {
public static void main(String[] args) throws ScriptException {
final ScriptEngineManager mgr = new ScriptEngineManager();
final ScriptEngine engine = mgr.getEngineByName("JavaScript");
System.out.println("neq: " + engine.eval("a1 = NaN; a1!=a1;"));
System.out.println("eq: " + engine.eval("a1 = NaN; a1==a1;"));
System.out.println("nid: " + engine.eval("a1 = NaN; a1!==a1;"));
System.out.println("id: " + engine.eval("a1 = NaN; a1===a1;"));
}
}
输出 :
neq: true
eq: true
nid: true
id: false
使用 oracle JDK:
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
我的理解是'eq'表达式应该返回false。
当 a1 是 NaN 时,为什么 a1 == a1 True 而不是 False ?