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:
- Valores numéricos
- Valores booleanos
- Valores string
- Valores undefined
- Valores null
- Arreglos Java y objetos JavaObjec
- Objetos JavaClass
- Otros objetos JavaScript
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.
|
| 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.
|
| byte char |
* Los valores son redondeados utilizando el modo de redondeo round-to-negative-infinity.
|
| java.lang.String | Los valores son convertidos a cadenas. Por ejemplo:
|
| boolean | * Los valores 0 y NaN son convertidos a falso.
|
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:
|
| byte char |
* true se convierte en 1
|
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:
JavaScript 1.3 y versiones anteriores:
|
| byte
double |
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:
JavaScript 1.3 y versiones anteriores:
|
| boolean | * La cadena vacía es convertida a false.
|
[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 |
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 |
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 |
El objeto es desenvuelto y cualesquiera de las siguientes situaciones ocurre:
|
| boolean | En JavaScript 1.3 y versiones posteriores, el objeto es desenvuelto y cualesquiera de las siguientes situaciones ocurre:
En JavaScript 1.2 y versiones anteriores, el objeto es desenvuelto y cualesquiera de las siguientes situaciones ocurre:
|
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:
En JavaScript 1.2 y versiones anteriores, el objeto es desenvuelto y cualesquiera de las siguientes situaciones ocurre:
|
[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 |
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:
En JavaScript 1.2 y versiones anteriores, el objeto es desenvuelto y cualesquiera de las siguientes situaciones ocurre:
|