Wiki-учебник по веб-технологиям: JavaScript/КонверсияТиповДанных ...

Главная | Каталог |

Конвертация Типов Данных


Поскольку язык Java строго типизирован, а JavaScript типизирован слабо, машина выполнения JavaScript конвертирует значения аргументов в типы данных, подходящие для других языков, если вы используете LiveConnect. Эта конвертация описана в разделах:


Конвертация JavaScript в Java


Если вы вызываете Java-метод и передаёте ему параметры из JavaScript, типы данных передаваемых параметров конвертируются в соответствии с правилами, описанными в следующих разделах:


return-значения методов объекта netscape.javascript.JSObject всегда конвертируются в экземпляры объекта java.lang.Object. Правила конвертации этих return-значений также описаны в этих разделах.

Например, если JSObject.eval возвращает JavaScript-число, вы можете найти правила конвертации этого числа в экземпляр объекта java.lang.Object в разделе Числа.

Числа


Если вы передаёте числовые типы JavaScript в качестве параметров методам Java, Java конвертирует эти значения в соответствии с правилами, описанными в следующей таблице:

Тип Java-параметраПравила Конверсии
doubleТочное значение переносится в Java без округления и без потери точности или знака.
lava.lang.Double, java.lang.ObjectСоздаётся новый экземпляр java.lang.Double, и точное значение передаётся в Java без округления и без потери точности или знака.
floatЗначения округляются до чисел с плавающей точкой;Значения, которые слишком малы или велики, чтобы быть представленными, округляются до +infinity или -infinity.
byte, char, int, long, shortЗначения округляются с использованием режима round-to-negative-infinity/округление-в-сторону-отрицательной-бесконечности; Значения, которые слишком малы или велики, чтобы быть представленными, дают ошибку времени выполнения; Значения NaN конвертируются до нуля.
java.lang.StringЗначения конвертируются в строки. Например: 237 становится “237”
booleanЗначения 0 и NaN конвертируются в false, другие значения конвертируются в true.

Если число JavaScript передаётся в качестве параметра в Java-метод, который ожидает экземпляр объекта java.lang.String, это число конвертируется в строку. Используйте метод equals()** для сравнения результата этой конвертации с другими строковыми значениями.

Булевы Значения


Если вы передаёте Булевы типы JavaScript как параметры для Java-методов, Java конвертирует значения в соответствии с правилами, описанными в следующей таблице:

Тип Java-параметраПравила Конверсии
booleanВсе значения конвертируются непосредственно в Java-эквиваленты.
lava.lang.Boolean, java.lang.ObjectСоздаётся новый экземпляр объекта java.lang.Boolean. Каждый параметр создаёт новый экземпляр, а не один экземпляр с тем же примитивным значением.
java.lang.StringЗначения конвертируются в строки. Например: true становится “true”, false становится “false”
byte, char, double, float, int, long, shorttrue становится 1; false становится 0

Если Булево значение JavaScript передаётся в качестве параметра Java-методу, ожидающему экземпляр объекта java.lang.String, Булево значение конвертируется в строку. Используйте операцию == для сравнения результата этой конвертации с другими строковыми значениями.

Строковые Значения


Если вы передаёте строковые типы JavaScript как параметры для Java-методов, Java конвертирует значения в соответствии с правилами, описанными в следующей таблице:

lava.lang.String, java.lang.Object|Строка JavaScript конвертируется в экземпляр объекта java.lang.String со значением Unicode.||
Тип Java-параметраПравила Конверсии
byte, double, float, int, long, shortВсе значения конвертируются в числа так, как описано в ECMA-262.Строковые значения Java Script? конвертируются в числа в соответствии с правилами ECMA-262
charОдносимвольные строки конвертируются в Unicode-символы.Все иные значения конвертируются в числа.
booleanПустая строка становится false, все иные значения становятся true.

Undefined-Значения


Если вы передаёте значения undefined JavaScript в качестве параметров методам Java, Java конвертирует значения в соответствии с правилами, описанными в следующей таблице:

Тип Java-параметраПравила Конверсии
lava.lang.String, java.lang.ObjectЗначение конвертируется в экземпляр объекта java.lang.String, значением которого является строка “undefined”.
booleanЗначение становится false.
double, floatЗначение становится NaN.
byte, char, int, long, shortЗначение становится 0.

Если значение undefined JavaScript передаётся в качестве параметра Java-методу, который ожидает экземпляр объекта java.lang.String, значение undefined конвертируется в строку. Используйте операцию == для сравнения результата этой конвертации с другими строковыми значениями.

Null-Значения


Если вы передаёте значения null JavaScript в качестве параметра Java-методам, Java конвертирует значения в соответствии с правилами, описанными в следующей таблице:

Тип Java-параметраПравила Конверсии
Любой класс и любой тип интерфейсаЗначение становится null.
byte, char, double, float, int, long, shortЗначение становится 0.
booleanЗначение становится false.

Объекты JavaArray и JavaObject


В большинстве случаев, если вы передаёте JavaArray или JavaObject JavaScript в качестве параметра Java-методу, Java просто снимает оболочку с объекта; в некоторых случаях объект приводится к другому типу данных в соответствии с правилами, описанными в следующей таблице:

Тип Java-параметраПравила Конверсии
Любой интерфейс или класс, совместимый при присвоении с развёрнутым /unwrapped объектом.Объект разворачивается.
java.lang.StringОбъект разворачивается, вызывается метод toString развёрнутого Java-объекта, и результат возвращается как новый экземпляр объекта java.lang.String.
byte, char, double, float, int, long, shortОбъект разворачивается, и возникает одна из следующих ситуаций: Если развёрнутый Java-объект имеет метод doubleValue, the JavaArray или JavaObject конвертируется в значение, возвращаемое этим методом; Если развёрнутый Java-объект не имеет метода doubleValue, возникает ошибка.
booleanОбъект разворачивается, и возникает одна из следующих ситуаций: Если объект – null, он конвертируется в false; Если объект имеет какое-либо другое значение, он конвертируется в true.

Объекты JavaClass


Если вы передаёте объект JavaClass из JavaScript в качестве параметра Java-методу, Java конвертирует значение в соответствии с правилами, описанными в следующей таблице:

Тип Java-параметра**Правила Конверсии
java.lang.ClassОбъект разворачивается.
java.lang.JSObject, java.lang.ObjectОбъект JavaClas разворачивается в новый экземпляр объекта java.lang.JSObject.
java.lang.StringОбъект разворачивается, вызывается метод toString развёрнутого Java-объекта и результат возвращается как новый экземпляр объекта java.lang.String.
booleanОбъект разворачивается, и возникает одна из следующих ситуаций: Если объект – null, он конвертируется в false; Если объект имеет какое-либо другое значение, он конвертируется в true.

Другие Объекты JavaScript


Если вы передаёте любой иной объект JavaScript в качестве параметра Java-методу, Java конвертирует значение в соответствии с правилами, описанными в следующей таблице:

Тип Java-параметраПравила Конверсии
java.lang.JSObject, java.lang.ObjectОбъект разворачивается в новый экземпляр объекта java.lang.JSObject.
java.lang.StringОбъект разворачивается, вызывается метод toString развёрнутого Java-объекта и результат возвращается как новый экземпляр объекта java.lang.String.
byte, char, double, float, int, long, shortОбъект конвертируется в значение с использованием логики оператора ToPrimitive, описанного в ECMA-262.
booleanОбъект разворачивается, и возникает одна из следующих ситуаций: Если объект – null, он конвертируется в false; Если объект имеет какое-либо другое значение, он конвертируется в true.

Конвертация из Java в JavaScript


Значения, передаваемые из Java в JavaScript, конвертируются так:


Заметьте, что экземпляры объектов java.lang.Double и java.lang.Integer конвертируются в объекты JavaScript, а не в числа JavaScript. Аналогично и экземпляры java.lang.String также конвертируются в объекты JavaScript, а не в строки JavaScript.
Java String-объекты также соответствуют JavaScript-оболочкам. Если вы вызываете метод JavaScript, который требует строки JavaScript, и передаёте его этой оболочке, вы получите ошибку. Вместо этого конвертируйте оболочку в строку JavaScript путём присоединения к ней пустой строки, как показано здесь:

var JavaString = JavaObj.methodThatReturnsAString();
var JavaScriptString = JavaString + "";