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

IT技术 javascript debugging alert console.log
2021-01-25 13:11:09

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

6个回答
  • alert() 正在阻塞
  • alert() 在非调试环境中不容易被抑制
  • console 通常很好地格式化您的对象并允许遍历它们
  • 日志记录语句通常具有指向发出日志记录语句的代码的交互式指针
  • 您一次不能查看多于一条alert()消息
  • consoles 可以具有具有直观格式的不同日志记录级别
@PeterOlson - 警报不仅仅是老派,它是可怕的和侵入性的......当然你可以巧妙地解决它,但不是最好的事情,为什么不让每个开发人员保持一致并使用 F12 开发人员工具并停止讨厌警报。
2021-03-15 13:11:09
我不确定你所说的警报不能被轻易压制是什么意思。所有你需要的是alert = function(){}
2021-03-30 13:11:09
IE 已经坏了,console.log()不需要。这仅适用于旧版本的 IE,如果您支持它,那么您就是在浪费宝贵的时间。去做一些很棒的事情,不支持古老的浏览器。
2021-04-02 13:11:09
不要忘记 if(window.console)console.log 否则你会破坏 IE 用户的废话,因为控制台在打开之前不存在。
2021-04-05 13:11:09
但是很多时候,console.log 和alert 显示的结果是有明显区别的。我正在尝试一个程序,如果键是用户提供的并且它的值为“ proto ”,则忽略对象中的键分配控制台显示一个空对象作为输出,即 {},而警报显示“[Object object]”。似乎@lonesomeday 在下面也提到了同样的问题。
2021-04-08 13:11:09

试试这个:

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() 的主要好处是:

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

最后归结为您更喜欢调试的方式。

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

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

alert需求被解雇之前,JavaScript执行就可以恢复。console.log没有这样的问题。

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