为什么console.log()认为比alert()更好?

我总是被告知,在debugging应用程序时,JavaScript的console.log()方法比单纯使用alert()方法更受欢迎。 为什么是这样? 有没有一个很好的例子,有人可以指出我在哪里console.log()显然是更好的select?

  • alert()被阻塞
  • alert()在非debugging环境中不能被轻易抑制
  • console通常很好地格式化你的对象,并允许遍历它们
  • 日志语句通常有一个交互指针,用来发布日志语句的代码
  • 您无法一次查看多个alert()消息
  • console可以具有不同的日志logging级别和直观的格式

尝试这个:

 var data = {a: 'foo', b: 'bar'}; console.log(data); alert(data); 

你会看到console.log显示你的对象,而alert给你[object Object] ,这是没有用的。 这也是如此,例如元素:

 alert(document.body); // [object HTMLBodyElement] (exact result depends on your browser) 

两者都只是获取有关当时在JS中发生的事情的信息的一种方式。 我以前常常使用alert(),但是由于几个原因而迁移到console.log()。 (注:控制台提供的不仅仅是log(),还要看看它还能做什么)。

我认为console.log()的主要好处是:

  • 它不会像alert一样停止进程
  • 你可以看到什么脚本扔了日志条目,而不是把行写入你的消息
  • 如果你有多于一件事你正在debugging它可以得到真正的烦人,保持击中你的警报框“确定”
  • 你可以logging对象,并得到很多好的信息(感谢提醒,其他答案)

最后归结为你更喜欢debugging。

有一件事要注意。 并不是所有的浏览器都支持console.log(),如果在代码中保留console.log()调用,将会出现问题。 提供一个控制台存根,如果控制台不可用来解决该问题。

它是非阻塞的,允许你深入地检查对象(而不是仅仅看到toString()的结果)。

在JavaScript执行恢复之前,需要解除alertconsole.log没有这样的问题。

console.log还将显示带有值的对象,其中,对alert的调用将要求您首先遍历对象。

如果您忘记删除debugging警报声明,则会直接影响最终用户。
如果忘记删除debuggins console.log语句,则用户不受影响。
另外,console.log将允许您查看对象的完整内容,而不是JavaScript的toString()表示。

我猜它有点味道,但有一些使用console.log的好处:

  • 假设你想logging20个不同的东西,这将是相当烦人的警报。
  • 您可以logging对象,然后检查它们。
  • 例如在Chrome开发工具中,您可以保留不同页面之间的日志。
  • 它是非阻塞的
  • 如果忘记,它不会影响最终用户

仅举几例。

因为警报是一个PITA,所以停止一切,直到有input,并且不允许对象反省。

在某些情况下使用debugging器甚至更好。

alert()停止与浏览器的所有交互,直到消息被解散,而console.log()只是将消息输出到控制台。

防爆。 您正在打印一堆variables的值,以确保它们是正确的,并且不希望在每个variables之后closures警报窗口。