24

我一直被告知,在调试应用程序时,JavaScript 的console.log()方法比简单地使用alert()方法更受欢迎。为什么是这样?有没有一个很好的例子有人可以指出我console.log()显然是更好的选择?

4

9 回答 9

41
  • alert()正在阻塞
  • alert()在非调试环境下不能轻易压制
  • console通常很好地格式化您的对象并允许遍历它们
  • 日志语句通常有一个交互式指针,指向发出日志语句的代码
  • 您一次不能查看多于一条alert()消息
  • consoles 可以有不同的日志级别,具有直观的格式
于 2011-11-20T17:58:23.727 回答
8

试试这个:

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)
于 2011-11-20T17:58:09.737 回答
5

两者都只是获取有关您的 JS 中正在发生的事情的信息的一种方式。我曾经一直使用 alert(),但出于一些原因迁移到了 console.log()。(旁注:控制台提供的不仅仅是 log(),看看它还能做什么)。

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

  • 它不会像 alert 那样停止进程
  • 您可以查看脚本的哪一行抛出了日志条目,而无需将该行放入您的消息中
  • 如果您要调试的东西不止一件事,那么在警报框上一直按“确定”会很烦人
  • 您可以记录对象并获得很多有用的信息(感谢提醒,其他回答者)

最后归结为您喜欢如何调试。

需要注意的一件事。并非所有浏览器都支持 console.log(),如果您将 console.log() 调用留在代码中,则会出现问题。如果控制台无法解决该问题,请提供控制台存根。

于 2011-11-20T18:02:52.447 回答
3

它是非阻塞的,允许您深入检查对象(而不是只查看toString()它们的结果)。

于 2011-11-20T17:57:21.030 回答
2

alertjavascript 执行可以恢复之前需要解除。console.log没有这样的问题。

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

于 2011-11-20T17:57:35.207 回答
2

我想这有点口味问题,但使用 console.log 有很多好处:

  • 假设你想记录 20 种不同的东西,这对 alert 来说会很烦人。
  • 例如,您可以记录对象,然后检查它们。
  • 例如,在 Chrome 开发工具中,您可以保留不同页面之间的日志。
  • 它是非阻塞的
  • 如果忘记,它不会影响最终用户

仅举几例。

于 2011-11-20T17:59:53.403 回答
1

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

于 2011-11-20T17:58:32.497 回答
0

因为警报是一个 PITA,所以在有输入之前停止一切,并且不允许对象自省。

在某些情况下,使用调试器会更好。

于 2011-11-20T17:58:02.543 回答
0

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

前任。您正在打印一堆变量的值,以确保它们是正确的,并且不想在每个变量之后关闭警报窗口。

于 2011-11-20T18:01:33.087 回答