“警报很糟糕” - 真的吗?

时间:2012-01-11 19:25:45

标签: javascript

有这种想法在“警告()错误”中运行。

致谢:

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

问题:

  1. 从不使用alert()是否有充分合理的理由?
  2. console.log()增加的值是否真的会大幅降低alert()的价值,以至于从“有限情景中的有用”变为“糟糕”?
  3. 对于想要在没有设置日志记录且任何副作用无关紧要的简短测试中使用alert()的人,您有什么看法?(想想教程或快速原型)?

6 个答案:

答案 0 :(得分:23)

  

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

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

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

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

是的,虽然有一些例外

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

答案 1 :(得分:8)

  1. 不,这只是一种语言功能,没有理由从不使用alert()
  2. alert()的工作方式与console.log()不同,console并非始终可用,因此console.log()可能会降低alert()的价值,但肯定会它不能总是被替换
  3. 说明console.log()alert()的区别,特别是 alert()必须输出字符串,因此必须先将值转换为字符串 - 它非常重要的是,如果你想检查你在某一点上的价值,你选择了alert()来完成这项任务。 它也会停止执行脚本(这可能会有用)。
  4. 更多链接:

答案 2 :(得分:3)

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

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

存在“正确”的用例,例如当您因某种原因需要停止正常页面流时,继续加载页面是危险的(安全性)。我想不出很多具体的例子,但它们就在边缘。某处。

答案 3 :(得分:2)

出于调试目的,alert有时会适得其反,但它是立竿见影的。在调试方案中使用alert的问题在于它会中断程序流。而console.log从允许程序流程继续中受益。

您必须记住,console.log不是window的标准属性,因为第三方工具(如Firebug,Inspector和IE Developer Tools)扩展了window。 1}}具有console对象实例的对象。如果您在运行Firebug之类的操作时最终在代码中留下console.log语句,则可能导致脚本失败。

在实时代码中使用alert似乎不受欢迎,但使用它是完全符合逻辑的,如果这是您希望提醒用户的机制。例如,如果他们尝试提交无效数据,则抛出alert("Please enter XXX");是完全有效的。当然,这是否提供最佳用户体验是另一回事。

另一件需要考虑的事情是,如果需要,可以替换alert函数,例如:

var oldAlertFunc = window.alert;
window.alert = function(message) {
    console.log(message);
};

答案 4 :(得分:1)

你打断了用户 - 如果他打开了很多标签,你警告他突然被指向你的标签..作为一个用户,我的屁股很痛苦。这是我最关心的问题..

已经说过console.log在所有浏览器中都不起作用IE7 for one不支持相同的。

只要清楚为什么会有警报,使用警报就可以了。

另外,警报对于记录JS对象没有帮助,只能显示字符串。

答案 5 :(得分:0)

好吧,您似乎已用第一个原因列表回答了您的问题。

  

从不使用警报是否有充分合理的理由?

调试网站时?是的,永远不要使用alert()

从来没有?也许太过分了。但是,对于大多数用户alert()会带来愤怒和沮丧。我从来没去过一个我很高兴的网站,他们用警报对话框打断了我的访问。

  

console.log()增加的价值是否真正降低了alert()的价值,使其从“在有限的情况下有用”变为“糟糕”。

在调试应用程序的上下文中,我同意,alert()很糟糕。我可以在console.log()中提供更多信息,这是一个完整的JavaScript对象,详细介绍了大量信息。警报框中显示的消息没有那么多的灵活性。

  

对于想要在没有设置日志记录并且任何副作用无关紧要的简短测试中想要使用alert()的人,你会怎么说(想想教程或快速原型)?

console.log()相比,输入alert()并不是那么难。你会得到更多,更有用的信息,并且你正在为你的编码“肌肉记忆”做好准备。如果你一直使用好的做法,他们会很自然地来到你身边。如果你一直使用不良做法,他们也会很自然地来到你身边。

最终,这取决于你在做什么。你在调试吗?或者您正在尝试与用户沟通?这是两个需要不同方法的不同事物。