二、console {Object}

如大多数浏览器中的 console 对象一样,其输出会发送到 stdout 或 stderr 中。

1. console.log([data], […])

可以接受多个参数,如有字符替换,则默认后续以逗号分隔的参数会替换成相应的字符,如:

  1. console.log('打印出数字: %d', '1234', '\n没有替换', '\n%s: %s', '第一个\%s', '第二个\%s');
  2. // 打印出数字: 1234
  3. // 没有替换
  4. // %s: %s 第一个%s 第二个%s

默认支持 3 种类型的字符替换操作,%s, %d, %j。分别代表字符串、数字和JSON。间个 % 并不会替换。

console.log() 还有几个兄弟:

  • console.info
  • console.error 但输出到 stderr
  • console.warn 同上
  • console.dir 在全局对象中已经介绍过,输出对象下的属性/方法
  • console.trace(label) 打印一个名为 label 的堆栈信息到 stderr

2. console.time(label) / console.timeEnd(lable)

计算程序运行时间的利器,计算 time 和 timeEnd 之间代码的运算时间,以 label 名来确定一个区间的内容,假设我们创建一个 label 名为 sofish 的计时器,如:

  1. // 这有点类似于 html 的 <div id="sofish"> ... </div>
  2. // 会计算名字为 _sofish_ 的这个区间内 for 循环的运行时间
  3. console.time('sofish');
  4. for(var i = 0; i < 1000; i++){
  5. console.log('计算这 for 循环的运算时间');
  6. };
  7. console.timeEnd('sofish');
  8. // 在我的机器返回: sofish: 26ms

3. console.assert(expression, [message])

assert.ok() 一样,当 expression 这个传入的表达式返回 false 的话,抛出一个 AssertionError,message 为自定义信息。

  1. console.assert(1===0, '出错了')
  2. // AssertionError: 出错了
  3. // at Object.exports.assert (console.js:75:23)
  4. // ...
  5. // 如果不指定 message,则返回表达式计算结果
  6. console.assert(1==0)
  7. // AssertionError: false == true
  8. // at Object.exports.assert (console.js:75:23)
  9. // ...

可能和你常用的测试用例的写法一样。当然,你完全可以用它来做测试用例,或者代替 throw new Error('hello')