itok's Lab

昔の開発ネタを記録として残してます

evalの引数と返り値

文字列を式として評価してくれる便利関数evalですが、(少なくとも)JSONの評価をする時なんかはクロスブラウザ対策(みたいなもの)が必要なのかも?

SafariFirefoxだとこれでいいんですが、

var json = eval(jsonStr);

IE(6でも7でも)ではちゃんと評価されないこともあって、こうするといいみたい。(こちらは前述のブラウザでもちゃんと動きます)

eval("var json = " + jsonStr);

という感じで、関数の返り値を変数に代入という感触からいえば前者の方が自然に受け入れられる構文ではありますが、後者を使うほうが安全みたいです。