JavaScript to Java Conversions

JavaScript から Java への変換

JavaScript から Java のメソッドを呼び出し、それにパラメータを渡す際、渡すパラメータのデータ型は以下のセクションで説明するルールに従って変換されます。

netscape.javascript.JSObject のメソッドの戻り値は常に java.lang.Object のインスタンスに変換されます。このような戻り値の変換ルールもここで説明します。

例えば JSObject.eval が JavaScript の数値を返すのであれば、この数値を java.lang.Object のインスタンスに変換するルールは 数値 に記載されています。

数値

Java のメソッドに JavaScript の数値型をパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します。

Java のパラメータ型 変換ルール
double
  • そのままの値が丸められたり絶対値や符号が損なわれたりすることなく Java に渡される。
  • NaN は NaN に変換される。
java.lang.Double
java.lang.Object
java.lang.Double の新しいインスタンスが作成され、そのままの値が丸められたり絶対値や符号が損なわれたりすることなく Java に渡される。
float
  • 値は浮動小数点数に丸められる。
  • 大きすぎまたは小さすぎて表現できない値は正の無限大または負の無限大に丸められる。
  • NaN は NaN に変換される。
byte

char
int
long

short
  • 値は負の無限大方向に丸められる。
  • 大きすぎまたは小さすぎて表現できない値はランタイムエラーとなる。
  • NaN は変換されずにランタイムエラーとなる。
java.lang.String 値は文字列に変換される。
  • 237 は "237" になる。
boolean
  • 0 および NaN は false に変換される。
  • その他の値は true に変換される。

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 値は文字列に変換される。
  • true は "true" になる。
  • false は "false" になる。
byte

char
double
float
int
long

short
  • true は 1 になる。
  • false は 0 になる。

java.lang.String のインスタンスをパラメータに想定した Java のメソッドに JavaScript の真偽値をパラメータとして渡すと、その真偽値は文字列に変換されます。== 演算子を使用するとこの変換結果と他の文字列を比較することができます。

文字列

Java のメソッドに JavaScript の文字列型をパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します。

Java のパラメータ型 変換ルール
java.lang.String
java.lang.Object
JavaScript 1.4:
  • JavaScript の文字列は Unicode 値を持つ java.lang.String のインスタンスに変換される。

JavaScript 1.3 以前:

  • A JavaScript の文字列は ASCII 値を持つ java.lang.String のインスタンスに変換される。
byte

double
float
int
long

short
すべての値は ECMA-262 に記載された数値に変換される。 JavaScript の文字列は ECMA-262 に記載されたルールに従って数値に変換される。
char JavaScript 1.4:
  • 1 文字の文字列は Unicode 文字に変換される。
  • 他のすべての値は数値に変換される。

JavaScript 1.3 以前:

  • すべての値は数値に変換される。
boolean
  • 空文字列は false になる。
  • 他のすべての値は true になる。

undefined 値

Java のメソッドに JavaScript の undefined 値をパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します。

Java のパラメータ型 変換ルール
lava.lang.String
java.lang.Object
値はその値が文字列 "undefined" である java.lang.String のインスタンスに変換される。
boolean 値は false になる。
double
float
値は NaN になる。
byte

char
int
long

short
値は 0 になる。

undefined 値の変換は JavaScript 1.3 以降でのみ可能です。それより古いバージョンでは undefined 値がサポートされていません。

java.lang.String のインスタンスをパラメータに想定した Java のメソッドに JavaScript の undefined 値をパラメータとして渡すと、その undefined 値は文字列に変換されます。== 演算子を使用するとこの変換結果と他の文字列を比較することができます。

null 値

Java のメソッドに JavaScript の null 値をパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します。

Java のパラメータ型 変換ルール
あらゆるクラス
あらゆるインタフェースの種類
値は null になる。
byte

char
double
float
int
long

short
値は 0 になる。
boolean 値は false になる。

JavaArray および JavaObject オブジェクト

ほとんどの場合、Java のメソッドに JavaScript の JavaArray または JavaObject オブジェクトをパラメータとして渡すと、Java は単にそのオブジェクトのラップを解きます。そうでない場合にはJava は次の表で示すルールに従ってそのオブジェクトを別のデータ型に変換します。

Java のパラメータ型 変換ルール
ラップが解かれたオブジェクトと代入互換性のある、あらゆるインタフェースまたはクラス オブジェクトのラップが解かれる。
java.lang.String オブジェクトのラップが解かれ、ラップが解かれた Java のオブジェクトの toString メソッドが呼び出され、java.lang.String の新しいインスタンスが返される。
byte

char
double
float
int
long

short
オブジェクトのラップが解かれ、次の状況のどちらかが起こる。
  • ラップが解かれた Java のオブジェクトに doubleValue メソッドがあれば、JavaArray または JavaObject がこのメソッドが返す値に変換される。
  • ラップが解かれた Java のオブジェクトに doubleValue メソッドがなければエラーが生じる。
boolean JavaScript 1.3 以降ではオブジェクトのラップが解かれ、次の状況のどちらかが起こる。
  • オブジェクトが null ならば false に変換される。
  • オブジェクトがそれ以外の値ならば true に変換される。

JavaScript 1.2 以前ではオブジェクトのラップが解かれ、次の状況のどちらかが起こる。

  • ラップが解かれたオブジェクトに booleanValue メソッドがあれば、ソースオブジェクトが戻り値に変換される。
  • オブジェクトに booleanValue メソッドがなければ変換に失敗する。

ラップが解かれたオブジェクトが 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 以降ではオブジェクトのラップが解かれ、次の状況のどちらかが起こる。
  • オブジェクトが null ならば false に変換される。
  • オブジェクトがそれ以外の値ならば true に変換される。

JavaScript 1.2 以前ではオブジェクトのラップが解かれ、次の状況のどちらかが起こる。

  • ラップが解かれたオブジェクトに booleanValue メソッドがあれば、ソースオブジェクトが戻り値に変換される。
  • オブジェクトに booleanValue メソッドがなければ変換に失敗する。

その他の JavaScript のオブジェクト

Java のメソッドに JavaScript のその他のオブジェクトをパラメータとして渡すと、Java は次の表で示すルールに従ってその値を変換します。

Java のパラメータ型 変換ルール
netscape.javascript.JSObject
java.lang.Object
オブジェクトが netscape.javascript.JSObject の新しいインスタンス内にラップされる。
java.lang.String オブジェクトのラップが解かれ、ラップが解かれたオブジェクトの toString メソッドが呼び出され、java.lang.String の新しいインスタンスが返される。
byte

char
double
float
int
long

short
オブジェクトが ECMA-262 に記載された ToPrimitive 演算子の論理を使用した値に変換される。この演算子で使用される PreferredType ヒントは Number。
boolean JavaScript 1.3 以降ではオブジェクトのラップが解かれ、次の状況のどちらかが起こる。
  • オブジェクトが null ならば false に変換される。
  • オブジェクトがそれ以外の値ならば true に変換される。

JavaScript 1.2 以前ではオブジェクトのラップが解かれ、次の状況のどちらかが起こる。

  • ラップが解かれたオブジェクトに booleanValue メソッドがあれば、ソースオブジェクトが戻り値に変換される。
  • オブジェクトに booleanValue メソッドがなければ変換に失敗する。



ドキュメントのタグと貢献者

 このページの貢献者: ethertank, Electrolysis, Mgjbot, Taken
 最終更新者: ethertank,