Rhino JS NativeArray类型

时间:2011-09-27 16:49:22

标签: java jvm rhino

我一直在试验Rhino - > Java的互操作性,并且遇到了一些我无法解释的问题。

我正在从Java调用脚本,将结果强制转换为Java对象,然后检索结果。

在我的JS中:

this.objectmap.put("list", [1,1,2,3,5]);

在NativeArray构造函数上设置断点,我看到传入的对象数组如下所示:

[1.0,1.0,2,3,5]

其中1.0是Double类型,2,3,5是Integer类型。

知道为什么会这样吗?我似乎无法追查根本原因。

1 个答案:

答案 0 :(得分:1)

JavaScript(或更确切地说,ECMA脚本)没有整数的概念。它只是具有“数字”的概念,这可能恰好包含整数值或实数值(浮点数)。两者都作为实数存储在变量中,因此存储在内存中。

因此,为了将其转换为Java代码,它使用“double”类型来表示它,因为它是它可以做出的最接近的表示。

http://www.ecma-international.org/publications/standards/Ecma-262.htm

http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf(规范和第8.5节“数字类型,9.3到数字”)

请注意这些规范与版本5(ECMA标准)有关,这可能不是Rhino实现的版本,因此您可能希望在网站上查找与您的ECMA实现版本相匹配的规范,但这个问题是相同的因为语言是发明的。

因此,在了解上述内容时,可以在与任何JavaScript / ECMA引擎进行互操作时将整数值提升为“double”类型。