[*JavaScript*] consoleメソッドの使用可否をブラウザごとに調べる

# はじめに
JavaScriptのデバッグをするときに、console.logなどを使いますが、
調べてみるとなんだかたくさんあったので触ってみました。
普段個人的にはChromeを使ってるけど、
Chromeと同じノリで他のブラウザで使った時に動かないのは嫌だし
仕事とかではIEなども使ったりするので、Chrome以外で動くのかも調べてみました。
使用ブラウザバージョンは以下。

* Chrome（47.0.2526.111 (64-bit)）
* Firefox（43.0.4）
* IE8_Win7（8.0.7601.17514）
* IE11_Win7 and Win 10（11.0.10240.16384と11.0.9600.17801）
* Edge_Win10（20.10240.16384.0）
* Safari（9.0.3）

# メソッド一覧・対応状況
コンソールにエラーが出たのが「×」。
「△」は更新プログラムを入れることで使えるようになったりするやつ。

|種類|Chrome|Firefox|IE8|IE11|Edge|Safari|
|:--|:--|:--|:--|:--|:--|:--|
|console.assert|○|○|○|○|○|○|
|console.clear|○|○|○|○|○|○|
|console.count|○|○|×|○|○|○|
|console.debug|○|○|×|○|○|○|
|console.dir|○|○|×|○|○|○|
|console.dirxml|○|○|×|○|○|○|
|console.error|○|○|○|○|○|○|
|console.group|○|○|×|○|○|○|
|console.groupCollapsed|○|○|×|○|○|○|
|console.groupEnd|○|○|×|○|○|○|
|console.info|○|○|○|○|○|○|
|console.log|○|○|○|○|○|○|
|console.profile|○|○|×|○|○|○|
|console.profileEnd|○|○|×|○|○|○|
|console.time|○|○|×|○|○|○|
|console.timeEnd|○|○|×|○|○|○|
|console.timeStamp|○|○|×|△|○|○|
|console.trace|○|○|×|○|○|○|
|console.warn|○|○|○|○|○|○|
|console.msIsIndependentlyComposed|×|×|×|△|○|×|

# 分かったこと
* 以下の「用途・使用例」は主にChromeで使えるものを列挙しているが、「%s」等のフォーマット指定子はChrome以外では意図した通りに動かないものが多い。
* console.logでのCSS適用はChrome以外にFirefox、Safariでは動作した。
* `console.timeStamp`はWin10の環境だとデフォルトで使えたがWin7の方では更新プログラムを当ててないからか使えなかった。
* `console.msIsIndependentlyComposed`はWin10のIE11とEdgeでは使用できた。（IE10などでも使える風なことがドキュメントに書いてあったので更新プログラム等の関係で使えると思われる）

# 用途・使用例
## console.assert
比較結果がfalseの場合はコンソールに赤い文字でメッセージが出力される。

```js
var value = 10;
console.assert(value < 10, "value < 10");
console.assert(value == 10, "value == 10");
```

![スクリーンショット 2016-01-23 14.44.06.png](https://qiita-image-store.s3.amazonaws.com/0/48912/992563df-8796-7d89-9811-2f096a1a0328.png)


## console.clear
コンソールがクリアされる。

```js
console.clear();
```

![スクリーンショット 2016-01-23 14.52.08.png](https://qiita-image-store.s3.amazonaws.com/0/48912/9656becd-cc1a-b65b-85ac-fe2138f5d111.png)

## console.count
呼び出された回数をカウントする。

```js
for(var i = 0; i < 3; i++){
  console.count("くるくる回る");
}
```

![スクリーンショット 2016-01-23 14.54.58.png](https://qiita-image-store.s3.amazonaws.com/0/48912/391896dc-e5ac-6408-babb-31ab6723e32a.png)

## console.debug
console.log()と同じ。

```js
console.debug("console.logと同一で非推奨");
```

![スクリーンショット 2016-01-23 14.57.24.png](https://qiita-image-store.s3.amazonaws.com/0/48912/a511d5d3-0a0b-0bc5-6abd-41b45549262a.png)

## console.dir
指定されたオブジェクトをJavaScript表現で出力する。

```js
console.dir(document.body);
```

![スクリーンショット 2016-01-23 15.02.01.png](https://qiita-image-store.s3.amazonaws.com/0/48912/a1e91287-e045-49cf-29d1-5ab5c66dda77.png)

## console.dirxml
指定されたオブジェクトをXML表現で出力する。

```js
console.dirxml(document.body);
```

![スクリーンショット 2016-01-23 15.06.50.png](https://qiita-image-store.s3.amazonaws.com/0/48912/2dfa4029-ef62-0e0f-e729-2926f9636356.png)

## console.error
エラーを出力。

```js
console.error("Error!!");
console.error("Error: %s (%i)", "Internal Server Error", 500);
```
![スクリーンショット 2016-01-23 15.10.21.png](https://qiita-image-store.s3.amazonaws.com/0/48912/b49946dd-3443-ad0a-e81e-fd5701815549.png)

## console.group
ログのグループを形成する。

```js
var groupName = "sample_group";
console.group("グループ: '%s'", groupName);
console.log("処理の実行！");
console.groupEnd();
```
![スクリーンショット 2016-01-23 15.13.14.png](https://qiita-image-store.s3.amazonaws.com/0/48912/d5dd701f-6a19-b910-5927-b45a89c663e4.png)

## console.groupCollapsed
console.groupとは違って、初期時に閉じられたログのグループを形成する。

```js
var user = "HANAKO";
console.groupCollapsed("ユーザー: '%s'", user);
console.log("デバッグデバッグ！");
console.groupEnd();
```
![スクリーンショット 2016-01-23 15.16.44.png](https://qiita-image-store.s3.amazonaws.com/0/48912/05bb7e7d-f9c6-8984-4dc0-c0636cfdc290.png)

## console.groupEnd
グループの終わり。（console.group参照）

```js
console.groupEnd();
```

## console.info
インフォメーション形式で出力する。

```js
console.info("インフォメーション！");
```
![スクリーンショット 2016-01-23 15.23.36.png](https://qiita-image-store.s3.amazonaws.com/0/48912/43f28bd2-be4b-60fa-5500-f34b3402bda9.png)

## console.log
最も一般的なログを出力するやつ。

```js
console.log("string: %s", "文字列");
console.log("integer: %i and %d", 123, 456);
console.log("float: %f", 123.123);
console.log("document body(DOM): %o", document.head);
console.log("document body(JavaScript Object): %O", document.head);
console.log("%cCSSを適用", "color:red; font-size: 20px;");
```
![スクリーンショット 2016-01-23 15.36.15.png](https://qiita-image-store.s3.amazonaws.com/0/48912/a368fdc7-5734-a53e-12eb-5ce9779f485c.png)

以下の様なフォーマット指定子を使える。（他のconsoleメソッドの一部でも使える）

|指定子|説明|
|:--|:--|
|%s|Stringにフォーマットする。|
|%d or %i|Integerにフォーマットする。|
|%f|小数点付きにフォーマットする。|
|%o|DOM要素としてフォーマットする。|
|%O|JavaScriptオブジェクトとしてフォーマットする。|
|%c|出力文字を指定CSSでフォーマットする。|

## console.profile
JavaScriptのCPUプロファイルを行う。

```js
console.profile("プロファイル！");
console.profileEnd("プロファイル！");
```
![スクリーンショット 2016-01-23 21.22.18.png](https://qiita-image-store.s3.amazonaws.com/0/48912/435ab32a-a8d0-126e-7e33-6c438da4fb85.png)
![スクリーンショット 2016-01-23 21.23.11.png](https://qiita-image-store.s3.amazonaws.com/0/48912/ffb9f0b8-5f38-a39c-b417-556224cc7bdd.png)

## console.profileEnd
JavaScriptのCPUプロファイルを終了する。

```js
console.profileEnd();
```

## console.time
処理の実行時間を計測する。

```js
console.time("for文の実行時間");
for(var i = 0; i < 10000; i++){
  // 何か処理
}
console.timeEnd("for文の実行時間");
```
![スクリーンショット 2016-01-23 21.33.29.png](https://qiita-image-store.s3.amazonaws.com/0/48912/ac3224b9-d595-aa75-73ab-cdf8973abf9f.png)

## console.timeEnd
処理の実行時間計測を終了する。

```js
console.timeEnd("for文の実行時間");
```

## console.timeStamp
セッション記録中にTimelineにイベントを追加。Timelineタブで見れる。

```html
<!DOCTYPE html>
<html>
<head>
  <title>title</title>
</head>
<body>
  <script>
    function timeStamp() {
      console.timeStamp("タイムスタンプ！");
    }
  </script>
</body>
</html>
```
![スクリーンショット 2016-01-24 15.35.30.png](https://qiita-image-store.s3.amazonaws.com/0/48912/c69c430a-0939-2bf9-fb98-29af8db9aefd.png)


## console.trace
スタックトレースの表示。処理がどこから呼ばれたのかが分かる。

```html
<!DOCTYPE html>
<html>
<head>
  <title>title</title>
</head>
<body>
  <button onclick="trace()">trace</button>

  <script>
    function trace(){
      console.trace("TRACE");
    }
  </script>
</body>
</html>
```
![スクリーンショット 2016-01-23 22.26.46.png](https://qiita-image-store.s3.amazonaws.com/0/48912/cd4c820d-2c80-7780-8298-57c0e02e7d99.png)

## console.warn
警告形式で出力する。

```js
console.warn("WARNING");
```
![スクリーンショット 2016-01-23 22.36.28.png](https://qiita-image-store.s3.amazonaws.com/0/48912/92154da0-b958-bbf5-6a0b-4f658bbc93af.png)

## console.msIsIndependentlyComposed
要素が独立して構成されているかどうかを示すブール値を取得できるらしい。
IEやEdgeで使える。

```js
console.msIsIndependentlyComposed(document.body);
```

# 参考
* [Console API Reference](https://developer.chrome.com/devtools/docs/console-api?hl=ja#consoletimestamplabel)
* [Console Debugging API](https://msdn.microsoft.com/ja-jp/library/hh772173(v=vs.85).aspx)
* [console](https://developer.mozilla.org/ja/docs/Web/API/console)
* [msIsIndependentlyComposed method](https://msdn.microsoft.com/ja-jp/library/hh781493(v=vs.85).aspx)