console.log は printf 相当の機能が一部ある
何気なく書かれているけど、console.log('got %s', foo);
という部分があり、おや?と思った。
もしかして、Node.js 以外でも使えたりする? と調査。
まず、Operaは使えなかったので除外。
Code | GoogleChorme | Firefox |
---|---|---|
console.log("%s", "hoge") | hoge | hoge |
console.log("%s", "hoge", "foo") | hoge foo | hoge foo |
console.log("%s", "hoge", {foo:"FOO"}) | hoge ▸Object | hoge ({foo:"FOO"}) |
console.log("%d", 10) | 10 | 10 |
console.log("%d", 10.5) | 10.5 | 10 |
console.log("%f", 10.5) | 10.5 | 10.5 |
console.log("%d", "hoge") | hoge | NaN |
console.log("%%", "hoge") | % hoge | %% hoge |
console.log("%o", 100) | 100 | 100 |
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]
になる
- 使うなら %s のみにしておけ。
- Firefox
- %d なら整数値、%f なら小数点も含めて、と評価してくれる
- %% はそのまま %%
- 未対応のものはそのまま出力
まあブラウザ間でまちまちなので、どれも共通した出力を望む場合は使わない方が無難そう。