Node.jsの勉強（１）console

今日はNode.jsのconsoleについて調べました。

# console.log

引数として受け取った0個以上の文字列を標準出力に出力し、改行を行います。

```js
> console.log()
console.log()

undefined
> console.log("a")
a
undefined
> console.log("a", "b")
a b
undefined
> console.log("%d yen kudasai")
%d yen kudasai
undefined
> console.log("%d yen kudasai", 50000)
50000 yen kudasai
undefined
> console.log("%d yen kudasai", 50000, "masenka")
50000 yen kudasai masenka
undefined
> console.log("mama", "%d yen kudasai", 100)
mama %d yen kudasai 100
undefined
> console.log("%d yen kudasai", "100")
100 yen kudasai
undefined
> console.log("%d yen kudasai", "a")
NaN yen kudasai
undefined
```

複数の文字列を渡した場合にはそれぞれの文字列の間は空白で区切られます。ただし、最初の文字列に書式指定文字列が含まれる場合にはその文字列以降の文字列が充当されます。その文字列以降に文字列が存在しない場合にはそのまま出力されます。文字列が充当される際には適切な型変換が行われます。

# console.info

`conosle.log`と同じです。

# console.error

標準エラー出力に出力する点以外は`console.log`と同じです。

# console.warn

`console.error`と同じです。

# console.dir

最初の引数として受け取ったオブジェクトの内容を標準出力に出力します。2つ目の引数としてオプションを渡すことができます。

```js
> console.dir()
undefined
undefined
> console.dir(123)
123
undefined
> console.dir("ppp")
'ppp'
undefined
> console.dir({})
{}
undefined
> console.dir({a: "a"})
{ a: 'a' }
undefined
> console.dir({a: "a", b: "b", c: {d: {e: {f: {}}}}})
{ a: 'a', b: 'b', c: { d: { e: [Object] } } }
undefined
> console.dir({a: "a", b: "b", c: {d: {e: {f: {}}}}}, {depth: 3})
{ a: 'a', b: 'b', c: { d: { e: { f: {} } } } }
undefined
> console.dir({a: "a", b: "b", c: {d: {e: {f: {}}}}}, {depth: null})
{ a: 'a', b: 'b', c: { d: { e: { f: {} } } } }
undefined
> console.dir({a: "a", b: "b", c: {d: {e: {f: {}}}}}, {depth: null, colors: true})
{ a: 'a', b: 'b', c: { d: { e: { f: {} } } } }
undefined
```

`depth`で再帰の深さを指定します。`null`を指定した場合、無制限に再帰します。`colors`を`true`に指定すると、色付きで出力されます。

```js
> var obj = { }
undefined
> Object.defineProperty(obj, 'foo', {enumerable: false})
{}
> obj
{}
> console.log(obj)
{}
undefined
> console.dir(obj, {showHidden: true})
{ [foo]: undefined }
undefined
```

`showHidden`を`true`に指定すると、列挙可能でないプロパティも出力対象となります。

# console.time

引数として受け取った識別子のタイマーを始動します。

# console.timeEnd

引数として受け取った識別子のタイマーを停止します。

```js
> console.time("timer1")
undefined
> console.timeEnd("timer1")
timer1: 6059.852ms
undefined
> console.timeEnd("timer2")
Error: No such timer name: timer2
    at Console.timeEnd (console.js:66:11)
    at repl:1:9
    at REPLServer.defaultEval (repl.js:248:27)
    at bound (domain.js:280:14)
    at REPLServer.runBound [as eval] (domain.js:293:12)
    at REPLServer.<anonymous> (repl.js:412:12)
    at emitOne (events.js:82:20)
    at REPLServer.emit (events.js:169:7)
    at REPLServer.Interface._onLine (readline.js:210:10)
    at REPLServer.Interface._line (readline.js:549:8)
```

存在しないタイマーの識別子を引数として指定すると、エラーが発生します。

# console.trace

スタックトレースを標準エラー出力に出力します。

```js
> console.trace()
Trace
    at repl:1:9
    at REPLServer.defaultEval (repl.js:248:27)
    at bound (domain.js:280:14)
    at REPLServer.runBound [as eval] (domain.js:293:12)
    at REPLServer.<anonymous> (repl.js:412:12)
    at emitOne (events.js:82:20)
    at REPLServer.emit (events.js:169:7)
    at REPLServer.Interface._onLine (readline.js:210:10)
    at REPLServer.Interface._line (readline.js:549:8)
    at REPLServer.Interface._ttyWrite (readline.js:826:14)
undefined
> console.trace(1, 2)
Trace: 1 2
    at repl:1:9
    at REPLServer.defaultEval (repl.js:248:27)
    at bound (domain.js:280:14)
    at REPLServer.runBound [as eval] (domain.js:293:12)
    at REPLServer.<anonymous> (repl.js:412:12)
    at emitOne (events.js:82:20)
    at REPLServer.emit (events.js:169:7)
    at REPLServer.Interface._onLine (readline.js:210:10)
    at REPLServer.Interface._line (readline.js:549:8)
    at REPLServer.Interface._ttyWrite (readline.js:826:14)
undefined
> console.trace("%d %d", 1, 2)
Trace: 1 2
    at repl:1:9
    at REPLServer.defaultEval (repl.js:248:27)
    at bound (domain.js:280:14)
    at REPLServer.runBound [as eval] (domain.js:293:12)
    at REPLServer.<anonymous> (repl.js:412:12)
    at emitOne (events.js:82:20)
    at REPLServer.emit (events.js:169:7)
    at REPLServer.Interface._onLine (readline.js:210:10)
    at REPLServer.Interface._line (readline.js:549:8)
    at REPLServer.Interface._ttyWrite (readline.js:826:14)
undefined
```

引数として`console.log`などと同様の方法でメッセージを渡すこともできます。

# console.assert

最初の引数として受け取った値が`false`である場合にエラーを発生します。2つ目以降の引数として受け取ったメッセージをエラーメッセージとして出力します。メッセージは`console.log`などと同様の方法で渡します。

```js
> console.assert(true)
undefined
> console.assert(true, "false desu")
undefined
> console.assert(false)
AssertionError: false == true
    at Console.assert (console.js:88:23)
    at repl:1:9
    at REPLServer.defaultEval (repl.js:248:27)
    at bound (domain.js:280:14)
    at REPLServer.runBound [as eval] (domain.js:293:12)
    at REPLServer.<anonymous> (repl.js:412:12)
    at emitOne (events.js:82:20)
    at REPLServer.emit (events.js:169:7)
    at REPLServer.Interface._onLine (readline.js:210:10)
    at REPLServer.Interface._line (readline.js:549:8)
> console.assert(false, "false desu")
AssertionError: false desu
    at Console.assert (console.js:88:23)
    at repl:1:9
    at REPLServer.defaultEval (repl.js:248:27)
    at bound (domain.js:280:14)
    at REPLServer.runBound [as eval] (domain.js:293:12)
    at REPLServer.<anonymous> (repl.js:412:12)
    at emitOne (events.js:82:20)
    at REPLServer.emit (events.js:169:7)
    at REPLServer.Interface._onLine (readline.js:210:10)
    at REPLServer.Interface._line (readline.js:549:8)
> console.assert(false, "%d desu", false)
AssertionError: 0 desu
    at Console.assert (console.js:88:23)
    at repl:1:9
    at REPLServer.defaultEval (repl.js:248:27)
    at bound (domain.js:280:14)
    at REPLServer.runBound [as eval] (domain.js:293:12)
    at REPLServer.<anonymous> (repl.js:412:12)
    at emitOne (events.js:82:20)
    at REPLServer.emit (events.js:169:7)
    at REPLServer.Interface._onLine (readline.js:210:10)
    at REPLServer.Interface._line (readline.js:549:8)
```