2008-05-07

Rhinoは||演算子による代入の仕様がブラウザと少々異なる

プログラムを書くと変数に値を代入する時に値が有効なものでない場合はデフォルト値をセットすることはよくあると思います。JavaScriptではこういうケースでよく使われるテクニックとして論理和演算子(||)を使った代入があります。
例えば次の場合、関数の引数が未指定(未定義値)の場合は"default"文字列を設定します。
function aiueo(param)
var param = param || "default";
return "aiueo_" + param;
}

||演算子は値がtrueと評価できる場合は値を返し、そうでない場合は右側の式の結果を返します。条件を満たせばif文や条件演算子(?:)を使うよりも簡素に記述できるので重宝します。

ここから本題なのですが、Rhinoでは||演算子による代入の仕様がブラウザと少々異なります。例えば次のコードをブラウザで実行するとvalue変数にはnullが入るのですが、Rhinoでは未定義値(void 0)が入ります。
//全てfalseと評価される値を||演算子で繋げて、どれが代入されるか確認する
var value = NaN || false || "" || void 0 || 0 || null;

ブラウザは全てfalseと評価される値の場合は最後の値を返すのですが、Rhinoは値の型により優先度の高い値を返します。その為、ブラウザとRhino両方で動作するプログラムを書く際は留意する必要があります。参考までに優先度を下記しておきます。

void 0 - 高い
""
NaN
null
0
false - 低い

0 件のコメント: