Pio*_*cki 8 javascript modulo java-8 nashorn
请考虑以下代码示例:
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class Tester {
public static void main( String[] args ) throws Exception {
ScriptEngine se = new ScriptEngineManager().getEngineByName( "nashorn" );
Object eval = se.eval( "5%5" );
System.out.println( "eval = " + eval );
System.out.println( "eval.getClass() = " + eval.getClass() );
}
}
Run Code Online (Sandbox Code Playgroud)
为什么它产生以下输出?
eval = 0.0
eval.getClass()= class java.lang.Double
结果类型java.lang.Double很奇怪.
如果余数不同于0则正确返回java.lang.Integer,例如5%2返回java.lang.Integer' with value1`.
只有0才是特别的.
在Firefox 32.0.2(FindBugs控制台)中尝试相同的JavaScript表达式可以正常工作并返回plain 0.
有没有办法强迫Nashorn返回Integer类型而不是Double?
8u40 - 即将发布的更新 - 源 http://hg.openjdk.java.net/jdk8u/jdk8u-dev/nashorn解决了这个问题.也就是说,最好期望"java.lang.Number"(在Java接口中)类型结果进行数值计算,并使用java.lang.Number方法转换,如intValue(),doubleValue()等.
JavaScript中没有整数.
从ECMAScript开始第8节:类型:
ECMAScript语言类型是Undefined,Null,Boolean,String,Number和Object.
然后参见ECMAScript第8.5节:数字类型:
Number类型具有正好18437736874454810627(即264-253 + 3)值, 表示双精度64位格式 IEEE 754值..."(强调添加)
Firefox将浮点值1显示为"1"而不是"1.0"这一事实无关紧要,让您感到困惑.
| 归档时间: |
|
| 查看次数: |
1875 次 |
| 最近记录: |