【问题标题】:JS library best practice: Return undefined or throw error on bad function input?JS 库最佳实践:在错误的函数输入上返回未定义或抛出错误?
【发布时间】:2012-01-31 03:35:39
【问题描述】:

在 JavaScript 中编写库时,处理函数的无效输入最标准(最友好?)的方法是什么?我的直觉告诉我,返回 undefined 完全没问题,但实际上抛出错误是否更有帮助?还是真的不重要?

我还可以看到返回 false、null 甚至 -1,但我不认为这些会像人们普遍预期的那样。

(如果这个问题太主观,我很乐意顺其自然。)

【问题讨论】:

  • 一个库应该用 cmets 编码,清楚地定义参数必须或可能是什么以及它们不能是什么,以及任何返回值的类型。最友好的做法是不要使用任何不准备处理的参数调用函数。
  • 因此,我负责记录功能,而用户则必须遵守其规则。这表明简单地返回 undefined 就足够了。但是由于我需要多花 1 分钟的时间来抛出错误而不是默默地死去,对于那些没有花时间阅读文档的人来说,这不会节省数小时的调试时间吗?或者,过于冗长和引发太多错误是否存在固有的负面影响。

标签: javascript coding-style


【解决方案1】:

我认为undefined 很好,但请记住:

JavaScript 没有 void 类型,所以每个函数都必须返回一个 价值。默认值是未定义的,除了构造函数,其中 默认返回值为this。

所以你不需要显式返回 undefined。默认情况下。

http://javascript.crockford.com/survey.html

【讨论】:

    【解决方案2】:

    异常的优点:

    • 如果错误很少发生(在正常操作中不会发生),那么调用代码在更高级别的位置捕获异常可能比在每次 API 调用后测试返回值更容易和更快。李>

    异常的缺点:

    • 捕获异常比测试返回值慢很多,所以如果错误很常见,那么异常会慢很多。
    • 如果调用代码要检查他们进行的每个 API 调用的错误(而不是在更高级别捕获异常),那么围绕每个 API 调用编写异常比仅仅测试返回值更痛苦。

    【讨论】:

    • 谢谢。用户测试返回值与为每个可能的无效输入抛出异常的速度和易用性对我来说很有意义。
    • 速度无关紧要:一个例外就是这样 - 一个例外,这意味着它很少发生。如果您已经预料到它会发生,请不要使用“异常”(因为在这种情况下,它听起来更像是“规则”,这并不一定意味着它是最常见的)。异常处理 UNEXPECTED,这是不应该发生的事情。处理正常程序流程中的预期。只是一个意见(取自他人)。
    【解决方案3】:

    可能很明显 如果您扩展环境 - 至少继续他们的练习

    快速回答。 如果这是浏览器中的javascript undefined 是可以的,如果是服务器中的javascript 则抛出错误。

    改进 让库用户选择行为作为选项,可以是库全局的,也可以是逐个对象的。

    【讨论】:

      猜你喜欢
      • 2018-04-28
      • 2013-08-12
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 2020-11-11
      • 2012-05-30
      • 1970-01-01
      相关资源
      最近更新 更多