Function#toString()とswitch構文
switchをつかった以下のようなコード
以下の現象ははFirefox(1.5.0.7)で確認しました(2では問題無)。Function#toString()は信じると痛い目にあうという話。switch構文は以下のようにかける(PHPでもOK!)*1
function foo() { switch(true) { case (typeof(a) != 'undefined'): alert('a'); break; case (typeof(b) != 'undefined'): alert('b'); break; } }
Function#toString()すると?
以下のようなコードを書いて foo.toString(); をすると以下のコードが返ってくる。げげげっdefaultが勝手に補足されてるよw
function foo() { switch (true) { case (typeof (a) != "undefined"): alert("a"); break; case (typeof (b) != "undefined"): default: alert("b"); break; } } |< **でも実行結果は ↑のコードを実行してもalert('b');は実行されません。ただ↓のコードを実行するとalert('b')が間違いなく実行されてしまうわけで…。eval(foo.toString())みたいなことをやると注意が必要っていう話。
*1:switch(true){ }の部分です。