2011年6月25日土曜日

Firebugのconsole.log()の返り値をそのまま使ってはいけない

以前Twitterで書いたけど、記事にするの忘れてたので。

そもそもはconsole.log()の返り値がundefinedだと思っているという前提みたいなものがあるので、気にならない人は全く気にならないと思います。

まず、console.logの返り値を使ってしまうとはどういう状況かというと

function mimi(arg){
if(!arg){
return console.log("引数ないよ!");// return&メッセージ出すと便利
// だけどこのときのreturnされるのはfalsyではない場合がある
}
// 処理
}
var res = mimi();// falsyな値が返ってくると思ってしまう
// 実際にはresに _firebugIgnore が返ってくる
if(res){ // resがtrueになって意図とは異なる可能性
// ほげ
}

このように、引数が足りないから空のreturnして関数を抜けることがありますが、こういうときに同時にメッセージを出力すると便利です。
だけど、Firefox4+Firebug1.7以降だと、console.logの返り値は_firebugIgnoreというものになっているため、上のように書くと意図とは異なる動作になる事があります。

回避法は単純にconsole.logの返り値がundefinedなどのfalsyと保証されている訳ではない事を理解して使えばいいので、いろいろやり方はある。

以前いろいろ書いたけど、JavaScriptでのlogデバッグ関数 | MemeTodoのようなlog関数を通すのが簡単で安全な気がします。

なんで_firebugIgnoreなんてものを返すのかは多分下あたりに。

0 コメント:

コメントを投稿