>jrunscript
js> var a = undefined;
js> if (a == undefined) {println('a == undefined');}
js> a == undefined
js> if (typeof a == 'undefined') {println("typeof a == 'undefined'");}
js> typeof a == 'undefined'
後で変数aをnullにしてみて、気が付いた。js> a = null;
js> if (a == undefined) {println('a == undefined');}
js> a == undefined
js> if (typeof a == 'undefined') {println("typeof a == 'undefined'");}
js> (変数aは未定義ではないので、何も出力されない)
ちなみに、undefined変数は、Java6付属のRhinoでも書き換え可能だった。なので、結果が確実そうな(typeof 変数 == 'undefined')を使うとして、文字列比較のパフォーマンスを気にする必要はあるんだろうか?
今はちょっとした書き捨てスクリプトに使っている程度なので、特に問題なさそうだ。
Rhinoのソースファイルを見ると、同じオブジェクト参照同士の同値比較ならJavaの==で片付けてもらえたと思うので、事前に(typeof 変数名)の返す文字列をキャッシュしておいて、以降の比較に使えば速いのかな、とか思ったものの、そんな細工が必要になるほどシビアな使い方をすることは無い...と思う。
0 件のコメント:
コメントを投稿