JavaScript から Java への変換
JavaScript から Java のメソッドを呼び出し、それにパラメータを渡す際、渡すパラメータのデータ型は以下のセクションで説明するルールに従って変換されます。
- 数値
- 真偽値
- 文字列
- undefined 値
- null 値
- JavaArray および JavaObject オブジェクト
- JavaClass オブジェクト
- その他の JavaScript のオブジェクト
netscape.javascript.JSObject
のメソッドの戻り値は常に java.lang.Object
のインスタンスに変換されます。このような戻り値の変換ルールもここで説明します。
例えば JSObject.eval
が JavaScript の数値を返すのであれば、この数値を java.lang.Object
のインスタンスに変換するルールは 数値 に記載されています。
数値
Java のメソッドに JavaScript の数値型をパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します。
Java のパラメータ型 | 変換ルール |
---|---|
double |
|
java.lang.Double java.lang.Object |
java.lang.Double の新しいインスタンスが作成され、そのままの値が丸められたり絶対値や符号が損なわれたりすることなく Java に渡される。 |
float |
|
byte char |
|
java.lang.String | 値は文字列に変換される。
|
boolean |
|
java.lang.String
のインスタンスをパラメータに想定した Java のメソッドに JavaScript の数値をパラメータとして渡すと、その数値は文字列に変換されます。equals()
メソッドを使用するとこの変換結果と他の文字列を比較することができます。
真偽値
Java のメソッドに JavaScript の真偽値型をパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します。
Java のパラメータ型 | 変換ルール |
---|---|
boolean | すべての値は Java の対応するものに直接変換される。 |
java.lang.Boolean java.lang.Object |
java.lang.Boolean の新しいインスタンスが作成される。各パラメータについて新しいインスタンスが作成される。同一のプリミティブ値を持つ 1 つのインスタンスではない。 |
java.lang.String | 値は文字列に変換される。
|
byte char |
|
java.lang.String
のインスタンスをパラメータに想定した Java のメソッドに JavaScript の真偽値をパラメータとして渡すと、その真偽値は文字列に変換されます。== 演算子を使用するとこの変換結果と他の文字列を比較することができます。
文字列
Java のメソッドに JavaScript の文字列型をパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します。
Java のパラメータ型 | 変換ルール |
---|---|
java.lang.String java.lang.Object |
JavaScript 1.4:
JavaScript 1.3 以前:
|
byte
double |
すべての値は ECMA-262 に記載された数値に変換される。 JavaScript の文字列は ECMA-262 に記載されたルールに従って数値に変換される。 |
char | JavaScript 1.4:
JavaScript 1.3 以前:
|
boolean |
|
undefined 値
Java のメソッドに JavaScript の undefined 値をパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します。
Java のパラメータ型 | 変換ルール |
---|---|
lava.lang.String java.lang.Object |
値はその値が文字列 "undefined" である java.lang.String のインスタンスに変換される。 |
boolean | 値は false になる。 |
double float |
値は NaN になる。 |
byte char |
値は 0 になる。 |
undefined 値の変換は JavaScript 1.3 以降でのみ可能です。それより古いバージョンでは undefined 値がサポートされていません。
java.lang.String
のインスタンスをパラメータに想定した Java のメソッドに JavaScript の undefined 値をパラメータとして渡すと、その undefined 値は文字列に変換されます。== 演算子を使用するとこの変換結果と他の文字列を比較することができます。
null 値
Java のメソッドに JavaScript の null 値をパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します。
Java のパラメータ型 | 変換ルール |
---|---|
あらゆるクラス あらゆるインタフェースの種類 |
値は null になる。 |
byte char |
値は 0 になる。 |
boolean | 値は false になる。 |
JavaArray および JavaObject オブジェクト
ほとんどの場合、Java のメソッドに JavaScript の JavaArray または JavaObject オブジェクトをパラメータとして渡すと、Java は単にそのオブジェクトのラップを解きます。そうでない場合にはJava は次の表で示すルールに従ってそのオブジェクトを別のデータ型に変換します。
Java のパラメータ型 | 変換ルール |
---|---|
ラップが解かれたオブジェクトと代入互換性のある、あらゆるインタフェースまたはクラス | オブジェクトのラップが解かれる。 |
java.lang.String | オブジェクトのラップが解かれ、ラップが解かれた Java のオブジェクトの toString メソッドが呼び出され、java.lang.String の新しいインスタンスが返される。 |
byte char |
オブジェクトのラップが解かれ、次の状況のどちらかが起こる。
|
boolean | JavaScript 1.3 以降ではオブジェクトのラップが解かれ、次の状況のどちらかが起こる。
JavaScript 1.2 以前ではオブジェクトのラップが解かれ、次の状況のどちらかが起こる。
|
ラップが解かれたオブジェクトが Java のパラメータ型のインスタンスであれば、インタフェースまたはクラスがラップが解かれたオブジェクトと代入互換性があるということです。つまり、次の文は必ず true を返します。
unwrappedObject instanceof parameterType
JavaClass オブジェクト
Java のメソッドに JavaScript の JavaClass オブジェクトをパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します。
Java のパラメータ型 | 変換ルール |
---|---|
java.lang.Class | オブジェクトのラップが解かれる。 |
netscape.javascript.JSObject java.lang.Object |
JavaClass オブジェクトが netscape.javascript.JSObject の新しいインスタンス内にラップされる。 |
java.lang.String | オブジェクトのラップが解かれ、ラップが解かれた Java のオブジェクトの toString メソッドが呼び出され、java.lang.String の新しいインスタンスが返される。 |
boolean | JavaScript 1.3 以降ではオブジェクトのラップが解かれ、次の状況のどちらかが起こる。
JavaScript 1.2 以前ではオブジェクトのラップが解かれ、次の状況のどちらかが起こる。
|
その他の JavaScript のオブジェクト
Java のメソッドに JavaScript のその他のオブジェクトをパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します。
Java のパラメータ型 | 変換ルール |
---|---|
netscape.javascript.JSObject java.lang.Object |
オブジェクトが netscape.javascript.JSObject の新しいインスタンス内にラップされる。 |
java.lang.String | オブジェクトのラップが解かれ、ラップが解かれたオブジェクトの toString メソッドが呼び出され、java.lang.String の新しいインスタンスが返される。 |
byte char |
オブジェクトが ECMA-262 に記載された ToPrimitive 演算子の論理を使用した値に変換される。この演算子で使用される PreferredType ヒントは Number。 |
boolean | JavaScript 1.3 以降ではオブジェクトのラップが解かれ、次の状況のどちらかが起こる。
JavaScript 1.2 以前ではオブジェクトのラップが解かれ、次の状況のどちらかが起こる。
|