console.log は printf 相当の機能が一部ある


何気なく書かれているけど、console.log('got %s', foo);という部分があり、おや?と思った。

もしかして、Node.js 以外でも使えたりする? と調査。

まず、Operaは使えなかったので除外。

CodeGoogleChormeFirefox
console.log("%s", "hoge")hogehoge
console.log("%s", "hoge", "foo")hoge foohoge foo
console.log("%s", "hoge", {foo:"FOO"})hoge ▸Objecthoge ({foo:"FOO"})
console.log("%d", 10)1010
console.log("%d", 10.5)10.510
console.log("%f", 10.5)10.510.5
console.log("%d", "hoge")hogeNaN
console.log("%%", "hoge")% hoge%% hoge
console.log("%o", 100)100100
console.log("%x", 100)[object Object]%x 100
console.log("%g", 100)[object Object]%g 100

な感じ。%03dとか桁あわせ相当のものはChromeにもFirefoxにもなかったので載せていない。

まとめ

  • 共通
    • %s が安定して使える
    • 余った引数はそのまま後続に付加される。
    • 余談だが、オブジェクト等を出力したいときは文字列化せずに複数引数にした方がデバッグに役立つ(後で展開できるため)
  • GoogleChrome
    • 使うなら %s のみにしておけ。
      • %d, %f などはどのみち文字列として評価されているっぽい雰囲気
    • %% を % に変換してくれる
    • 未対応のもの(?)は何故か[object Object]になる
  • Firefox
    • %d なら整数値、%f なら小数点も含めて、と評価してくれる
    • %% はそのまま %%
    • 未対応のものはそのまま出力

まあブラウザ間でまちまちなので、どれも共通した出力を望む場合は使わない方が無難そう。

追記

id:Syunpei さんが console オブジェクトの標準化について言及してた。