javascript - 从 javascript 函数验证参数的最佳方法是什么?

标签 javascript

<分区>

让我们看一些例子:

我有这个功能:

函数在等待一个参数(index),这样验证好不好?我的观点是,函数不会抛出任何错误,如果参数不是数字,函数将不会被使用,这很糟糕(因为任何正在调试这段代码的人都不会看到这个错误),但我应该到处都使用“try and catch”?

ps:这不是发送到服务器的验证,它只是与用户交互的验证,因此例如,如果用户单击某个按钮以设置某些内容(如颜色),这应该这样做,唯一如果有人通过 javascript 更改其中的值,则会发生此处的错误,但它只会发生在他们的浏览中......

/**
* @param Int index
*/
this.setDrawAttention = function (index) {
     if (lodash.isNumber(index) && !lodash.isNaN(index)) {
            this.drawAttentionIndex = index;
     }
};

或者这个函数会更好(使用 throw,但我不喜欢在任何地方都使用 try catch... 为什么我需要这个?它不会被发送到服务器,并且错误像我之前说过,只有当用户通过 javascript 更改此值时才会发生,但此错误只会显示给他或正在调试它的人,但我不需要这样做...):

/**
* @param Int index
*/
this.setDrawAttention = function (index) {
     if (lodash.isNumber(index) && !lodash.isNaN(index)) {
            this.drawAttentionIndex = index;
     }
     else {
          throw {...};
     }
};

或者很简单,像这样(它不会被发送到服务器,如果有人试图输入其他值,错误将通过浏览器检测到,看看你是否正在调试是很好的......):

/**
* @param Int index
*/
this.setDrawAttention = function (index) {
     this.drawAttentionIndex = index;
};

最佳答案

如果您将此作为公共(public) API 公开,即其他开发人员会使用的东西,那么如果他们提供非法参数,则抛出异常是完全可以接受的。我想说这比什么都不做更可取,因为对于函数的用户来说,出了问题是显而易见的。

即使这不是公共(public) API,它仍然是一个很好的做法,因为它还可以帮助发现您的错误。

别担心会被捕获。您只捕获异常以将其包装在不同的类型中并重新抛出它(在 JavaScript 中通常不这样做),或者如果有一些可以想象的从异常中恢复的方法。由于无法从发送非法参数时引发的异常中恢复,因此您不必捕获它。

关于javascript - 从 javascript 函数验证参数的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24041921/

相关文章:

javascript - Javascript 得到 NaN 结果

javascript - jade 模板中的 javascript 日期转换有什么问题?

javascript - jCarouselLite 不适用于 <3 个列表项

javascript - 消除图像加载时间

javascript - 当使用 jquery 将类添加到 <li> 时,它会被添加并突然被删除。是jquery冲突还是其他什么?

javascript - 根据url显示div

javascript - 如何为新添加的行添加背景颜色angularjs

javascript - 制作另一个将显示列表(自动完成)并将用作所选字段的值的表单

php - 通过 javascript 保存文件(到服务器)

javascript - 如何检测浏览器是否支持聚焦于禁用元素?