Visit Mozilla.org

Guía JavaScript 1.5:Concepto general de LiveConnect:Conversiones de tipos de datos:Conversiones de JavaScript a Java

De MDC

Tabla de contenidos

[editar] Conversiones de JavaScript a Java

Cuando usted invoca a un método Java y pasa a este parámetros desde JavaScript, los tipos de datos de los parámetros que pase son convertidos de acuerdo a las reglas descritas en las siguientes secciones:

Los valores de retorno de los métodos de netscape.javascript.JSObject son siempre convertidos a instancias de java.lang.Object. Las reglas para convertir estos valores de retorno también son descritas en estas secciones.

Por ejemplo, si JSObject.eval retorna un número JavaScript, puede encontrar las reglas para convertir este número como una instancia de java.lang.Object en Valores numéricos.

[editar] Valores numéricos

Cuando pase tipos numéricos JavaScript number como parámetros a métodos Java, Java convierte los valores acorde a las reglas descritas en la siguiente tabla:

Tipo de parámetro Java Reglas de conversión
double * El valor exacto es transferido a Java sin redondeo y sin una pérdida de magnitud o signo.
  • NaN es convertido a NaN.
java.lang.Double
java.lang.Object
Una nueva instancia de java.lang.Double es creada y el valor exacto es transferido a Java sin redondeo y sin una pérdida de magnitud o signo.
float * Los valores son redondeados a una precisión flotante.
  • Los valores demasiado largos o pequeños para ser representados son redondeados a +infinity o -infinity.
  • NaN es convertido a NaN.
byte

char
int
long

short
* Los valores son redondeados utilizando el modo de redondeo round-to-negative-infinity.
  • Los valores demasiado largos o pequeños para ser representados resultan en un error en tiempo de ejecución.
  • NaN no puede ser convertido y resulta en un error en tiempo de ejecución.
java.lang.String Los valores son convertidos a cadenas. Por ejemplo:
  • 237 se convierte en "237"
boolean * Los valores 0 y NaN son convertidos a falso.
  • Otros valores son convertidos a verdadero.

Cuando un número JavaScript es pasado como un parámetro a un método Java el cual espera una instancia de java.lang.String, el número es convertido a cadena. Utilice el método equals() para comparar el resultado de esta conversión con otros valores de cadena.

[editar] Valores booleanos

Cuando pase tipos booleanos JavaScript Boolean como parámetros a métodos Java, Java convierte los valores acorde a las reglas descritas en la siguiente tabla:

Tipo de parámetos Java Reglas de conversión
boolean todos los valores son convertidos directamente a sus equivalentes en Java.
lava.lang.Boolean
java.lang.Object
Una nueva instancia de java.lang.Boolean es creada. Cada parámetro crea una nueva instancia, ninguna instancia con los mismos valores primitivos.
java.lang.String Los valores son convertidos a cadenas. Por ejemplo:
  • true se convierte en "true"
  • false se convierte en "false"
byte

char
double
float
int
long

short
* true se convierte en 1
  • false se convierte en 0

Cuando un Booleano JavaScript Boolean es pasado como un parámetro a un método Java el cual espera una instancia de java.lang.String, el Booleano es convertido a una cadena. Utilice el operador == para comparar el resultado de esta conversión con otros valores de cadena.

[editar] Valores string

Cuando pase un tipo de cadena JavaScript como un parámetro a un método Java, Java convierte los valores acorde a las reglas descritas en la siguiente tabla:

Tipo de parámetro Java Reglas de conversión
java.lang.String
java.lang.Object
JavaScript 1.4:
  • Una cadena JavaScript es convertida a una instancia de java.lang.String con un valor Unicode.

JavaScript 1.3 y versiones anteriores:

  • Una cadena JavaScript es convertida a una instancia de java.lang.String con un valor ASCII.
byte

double
float
int
long

short
Todos los valores son convertidos a números tal como se describe en ECMA-262. El valor de una cadena JavaScript es convertido a un número acorde a las reglas descritas en ECMA-262.
char JavaScript 1.4:
  • Cadenas de un carácter son convertidas a caracteres Unicode.
  • Todos los otros valores son convertidos a números.

JavaScript 1.3 y versiones anteriores:

  • Todos los valores son convertidos a números.
boolean * La cadena vacía es convertida a false.
  • Todos los otros valores se convierten en true.

[editar] Valores undefined

Cuando pase valores no definidos JavaScript values como parámetros a un método Java, Java convierte los valores acorde a las reglas descritas en la tabla siguiente:

Tipo de parámetro Java Reglas de conversión
lava.lang.String
java.lang.Object
El valor es convertido a una instancia de java.lang.String cuyo valor es la cadena "undefined".
boolean El valor se convierte en false.
double
float
El valor se convierte en NaN.
byte

char
int
long

short
El valor se convierte en 0.

La conversión de un valor no definido es posible solamente en JavaScript 1.3 y versiones posteriores. Las versiones anteriores de JavaScript no soportan valores no definidos.

Cuando un valor no definido JavaScript es pasado como parámetro a un método Java el cual espera una instancia de java.lang.String, el valor no definido es convertido a cadena. Utilice el operador == para comparar el resultado de esta conversión con otros valores de cadena.

[editar] Valores null

Cuando pase valores nulos JavaScript values como parámetro a un método Java, Java convierte estos valores acorde a las reglas descritas en la tabla siguiente:

Tipo de parámetro Java Reglas de conversión
Cualquier clase
Cualquier tipo de interfaz
El valor se convierte en nulo.
byte

char
double
float
int
long

short
El valor se convierte a 0.
boolean El valor se convierte a falso.

[editar] Objetos JavaArray y JavaObject

En la mayoría de situaciones, cuando pase un JavaScript JavaArray o JavaObject como parámetro a un método Java, Java simplemente desenvuelve el objeto; en pocas situaciones, el objeto es coaccionado hacia otros tipos de datos acorde a las reglas descritas en la siguiente tabla:

Tipo de parámetro Java Reglas de conversión
Cualquier interfaz o clase que tiene una asignación compatible con un objeto desenvuelto [unwrapped object]. El objeto es desenvuelto.
java.lang.String El objeto es desenvuelto, el método toString de los objetos desenvueltos Java es invocado y el resultado es retornado como una nueva instancia de java.lang.String.
byte

char
double
float
int
long

short
El objeto es desenvuelto y cualesquiera de las siguientes situaciones ocurre:
  • si el objeto desenvuelto Java tiene un método doubleValue, JavaArray o JavaObject es convertido al valor retornado por este método.
  • Si el objeto desenvuelto Java no posee un método doubleValue, un error ocurre.
boolean En JavaScript 1.3 y versiones posteriores, el objeto es desenvuelto y cualesquiera de las siguientes situaciones ocurre:
  • Si el objeto es null, este es convertido a falso.
  • Si el objeto tiene cualquier otro valor, este es convertido a verdadero.

En JavaScript 1.2 y versiones anteriores, el objeto es desenvuelto y cualesquiera de las siguientes situaciones ocurre:

  • Si el objeto desenvuelto posee un método booleanValue, el objeto fuente es convertido al valor de retorno.
  • Si el objeto no posee un método booleanValue, la conversión falla.

Una interfaz o una clase es asignada compatible con un objeto unwrapped si el objeto unwrapped es una instancia de el tipo de parámetro Java. Esto es, la siguiente sentencia deberá retornar verdadero:

unwrappedObject instanceof parameterType

[editar] Objetos JavaClass

Cuando pase un objeto JavaScript JavaClass cmo parámetro a un método Java, Java convierte el objeto acorde a las reglas descritas en la tabla siguiente:

Tipo de parámetro Java Reglas de conversión
java.lang.Class El objeto es desenvuelto.
netscape.javascript.JSObject
java.lang.Object
El objeto JavaClass es desenvuelto en una nueva instancia de netscape.javascript.JSObject.
java.lang.String El objeto es desenvuelto, el método toString del objeto unwrapped Java es invocado y el resultado es retornado como una nueva instancia de java.lang.String.
boolean En JavaScript 1.3 y versiones posteriores, el objeto es desenvuelto y cualesquiera de las siguientes situaciones ocurre:
  • Si el objeto es nulo, este se convierte a falso.
  • Si el objeto posee cualquier otro valor, es convertido a verdadero.

En JavaScript 1.2 y versiones anteriores, el objeto es desenvuelto y cualesquiera de las siguientes situaciones ocurre:

  • Si el objeto desenvuelto posee un método booleanValue, el objeto fuente es convertido al valor de retorno.
  • Si el objeto no posee el método booleanValue, la conversión falla.

[editar] Otros objetos JavaScript

Cuando pase cualquier otro objeto JavaScript como un parámetro a un método Java, Java convierte el objeto acorde a las reglas descritas en la tabla siguiente:

Tipo de parámetro Java Reglas de conversión
netscape.javascript.JSObject
java.lang.Object
El objeto es desenvuelto en una nueva instancia de netscape.javascript.JSObject.
java.lang.String El objeto es desenvuelto, el método toString del objeto unwrapped es invocado y el resultado es retornado como una nueva instancia de java.lang.String.
byte

char
double
float
int
long

short
El objeto es convertido a un valor utilizando la lógica del operador ToPrimitive descrita en ECMA-262. El rastro PreferredType utilizado con este operador es Number.
boolean En JavaScript 1.3 y versiones posteriores, el objeto es desenvuelto y cualesquiera de las siguientes situaciones ocurre:
  • Si el objeto es nulo, este se convierte en falso.
  • Si el objeto posee cualquier otro valor, es convertido en verdadero.

En JavaScript 1.2 y versiones anteriores, el objeto es desenvuelto y cualesquiera de las siguientes situaciones ocurre:

  • Si el objeto unwrapped posee el método booleanValue, el objeto fuente es convertido al valor de retorno.
  • Si el objeto no posee el método booleanValue, la conversión falla.