2011-09-27 16 views
1

我一直在試驗Rhino - > Java的互操作性,並且遇到了一些我不能解釋的東西。Rhino JS NativeArray類型

我正在從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

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

注意這些規範涉及到第5版(ECMA標準的),這可能不是什麼犀牛工具,所以你可能希望在網站上查找符合ECMA實施版本的規範,但自從語言發明以來,這件事情一直如此。

因此,瞭解上述情況時,可以在與任何JavaScript/ECMA引擎進行互操作時將整數值提升爲「double」類型。

+0

感謝您的信息。你是絕對正確的 - *在Java中處理它們時,我的JS數值中的大部分都是double類型的。只有在我使用數組的類型開始混合的情況下。 – eff

相關問題