Rhino JS NativeArray типы - PullRequest
       14

Rhino JS NativeArray типы

1 голос
/ 27 сентября 2011

Я экспериментировал с совместимостью 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 Ответ

1 голос
/ 29 сентября 2011

JavaScript (или, скорее, ECMA Script) не имеет понятия целого числа. Он просто имеет понятие «Число», в котором может содержаться целое или действительное значение (с плавающей запятой). Оба хранятся в виде действительного значения в переменной и, следовательно, в памяти.

Таким образом, чтобы преобразовать его в код Java, он использует тип "double", чтобы представить его как самое близкое представление, которое он может сделать.

http://www.ecma -international.org / публикации / стандарты / Ecma-262.htm

http://www.ecma -international.org / публикации / файлы / ECMA-ST / Ecma-262.pdf (спецификация и раздел 8.5 Тип номера, от 9,3 до номера)

Обратите внимание, что эти спецификации относятся к версии 5 (стандарта ECMA), которая, вероятно, не соответствует тому, что реализует Rhino, поэтому вы можете посмотреть на веб-сайте спецификацию, соответствующую вашей версии, реализованной в ECMA, но этот вопрос был тем же. так как язык был изобретен.

Таким образом, зная вышесказанное, можно целочисленные значения повышать до «двойного» типа при взаимодействии с любым механизмом JavaScript / ECMA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...