"警报很糟糕" - 真的吗?

Joh*_*her 19 javascript

有这个想法,"警报()是坏的 ".

致谢:

  • 当然,我们很少想在实际的UI设计中使用它,因为有更好的方式与用户进行通信.
  • 对于调试,console.log()有更多的价值alert().
  • 某些情况(如使用setTimeout)在遇到障碍时alert()会遇到问题.
  • 实际的调试器处理暂停和恢复执行的效果要比alert()开发人员需要的更好.

问题:

  1. 是否有一个坚实,合理的理由永远不会使用alert()
  2. 增加的价值是否console.log()真正降低了alert()它的价值,从"有限的情况下的有用"到"坏的"?
  3. 对于想要alert()在没有设置日志记录并且任何副作用无关紧要的简短测试中使用的人(想想教程或快速原型),你怎么说?

Ray*_*nos 26

是否有一个坚实的,合理的理由永远不会使用alert()?

警报很糟糕,因为它没有积极的功能,只有负面的功能

  • 阻止整个浏览器
  • 阻止javascript线程
  • 只打印字符串
  • 要求用户交互继续(这意味着您无法自动化浏览器使用)
  • 被常见的弹出窗口阻止程序阻止
  • 在node.js之类的非浏览器环境中不起作用(但是console.log在node.js中有效)

console.log()的增加值是否真的会大大降低alert()的值,使其从"在有限情况下有用"变为"坏"?

是的,虽然有一些例外

唯一的价值警报是作为调试旧版浏览器的快速黑客工具或作为惹恼用户的工具.

  • @JohnFisher没有警报是坏的,因为它阻止整个浏览器_and_没有充分的理由使用它.说真的,你为什么要用它呢? (6认同)
  • @Raynos:感谢你的尝试,但是"这很糟糕,因为我不知道它为什么好"并不是一个从不使用它的合乎逻辑的理由. (4认同)
  • 它阻止了javascript和UI,因为它们都运行相同的线程.+1 (3认同)
  • 两个downvotes,这个答案实际上有问题吗? (3认同)
  • 我不确定为什么会有人拒绝这个答案(也许他们使用`alert()`很多),但事实是`alert()`可能很有用.我已经看到大量的代码存在可能由竞争条件引起的问题 - 一段代码检索到一些数据而另一段代码改变了前景,当它们以错误的顺序发生时,你可以看到各种故障(如跳跃框).这是实际冻结线程的地方(如"_blocks javascript thread_"中所述)可能很有用 - 你可以在调用的时候看到`alert()`的界面. (2认同)

ziz*_*ozu 8

  1. 不,它只是一种语言功能,没有理由永远不会使用alert().
  2. alert()工作方式不同console.log(),console也不总是可用,因此console.log()可能会减少价值alert(),但肯定不能总是被替换.
  3. 解释有何console.log()不同alert(),特别是alert()必须输出字符串,所以它必须首先将值转换为字符串 - 如果你想检查你在某个时候有什么价值并且你选择alert()完成那个任务,这是非常重要的.它还会停止脚本的执行(这有时可能很有用).

更多链接:


Rob*_*len 7

这与“从不使用表”位相同。它夸张地旨在减少这种极其糟糕的设计的实例数量。它被认为是糟糕的设计,因为它会阻止额外的浏览器操作(如后退按钮)和代码执行(额外的 JavaScript 和页面渲染),直到用户单击“确定”按钮。该按钮上的“确定”标签无法更改,并且不适合绝大多数用例。

有更好的方法来显示错误信息、健全性检查操作和确认对话框,因此请使用它们。

有一些“适当的”用例,例如当您由于某种原因需要停止正常的页面流并且继续加载页面是危险的(安全)时。我想不出很多具体的例子,但它们都处于边缘。某处。