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

Javascript 为什么console.log()被认为比alert()更好?,javascript,debugging,alert,console.log,Javascript,Debugging,Alert,Console.log,我一直被告知,在调试应用程序时,JavaScript的console.log()方法比简单地使用alert()方法更可取。为什么会这样?有没有一个很好的例子可以让我看看console.log()显然是更好的选择?它是无阻塞的,允许您深入检查对象(而不仅仅是查看toString()处理对象的结果)。在恢复javascript执行之前,需要解除警报console.log没有这样的问题 console.log还将显示具有值的对象,其中调用alert将要求您首先遍历对象。由于报警是PITA,因此在有输入

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

它是无阻塞的,允许您深入检查对象(而不仅仅是查看
toString()
处理对象的结果)。

在恢复javascript执行之前,需要解除
警报
console.log
没有这样的问题


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

由于报警是PITA,因此在有输入之前停止所有操作,并且不允许对象自省

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

尝试以下方法:

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)
  • alert()
    正在阻止
  • alert()
    在非调试环境中无法轻松抑制
  • console
    通常会很好地格式化对象,并允许遍历它们
  • 日志语句通常有一个交互式指针,指向发出日志语句的代码
  • 一次不能查看多条
    alert()
    消息
  • 控制台
    s可以使用直观的格式设置不同的日志记录级别

如果忘记删除调试警报语句,将直接影响最终用户。
如果忘记删除debuggins console.log语句,则用户不会受到影响。

此外,console.log将允许您查看对象的完整内容,而不是JavaScript的toString()表示形式。

我想这在某种程度上是一个品味问题,但是使用console.log有很多好处:

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

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


例如,您正在打印一组变量的值,以确保它们是正确的,并且不希望在每个变量之后关闭警报窗口。

这两种方法都只是获取有关JS中当时发生的情况的信息的一种方法。我以前一直使用alert(),但出于一些原因迁移到了console.log()。(旁注:console提供的不仅仅是log(),看看它还能做些什么)

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

  • 它不像警报那样停止进程
  • 您可以看到哪个脚本的哪一行抛出了日志条目,而无需将该行放入消息中
  • 如果你正在调试不止一件事情,那么在你的警报框中不断点击“ok”会让你非常恼火
  • 您可以记录对象并获得许多好信息(感谢提醒,其他回复者)
最后,它归结为您喜欢如何调试


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

不要忘记(window.console)console.log,否则您将为IE用户提供垃圾,因为控制台在打开之前不存在。我不确定您所说的警报无法轻松抑制是什么意思。你所需要的只是
alert=function(){}
@PeterOlson——alert不仅仅是老派的,它是可怕的、具有侵略性的。。当然,你可以巧妙地解决这个问题,但这不是最好的办法,为什么不让每个开发人员都保持一致,使用F12开发人员工具,停止使用令人讨厌的警报。例如,已经中断,不需要
console.log()
。这只适用于旧版本的IE,如果你支持它,那就是在浪费宝贵的时间。去做一些很棒的东西,不要支持古老的浏览器。