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

时间:2014-06-04 15:45:42

标签: javascript

让我们看一些例子:

我有这个功能:

该函数正在等待一个参数(索引),这样验证是否合适?我的观点是,函数不会抛出任何错误,如果参数不是数字,函数将不会被使用,这很糟糕(因为任何调试此代码的人都不会看到此错误),但是我应该到处使用“尝试和捕捉”?

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;
};

1 个答案:

答案 0 :(得分:1)

如果您将此作为公共API公开,即某些其他开发人员将使用的内容,那么如果它们提供非法参数,则抛出异常是完全可以接受的。我会说这比做 nothing 更合适,因为对于函数的用户来说,显然会出现问题。

即使这是公共API,它仍然是一种很好的做法,因为它也可以帮助抓住你的错误。

不要担心抓住它。您只捕获异常以将其包装在另一种类型中并重新抛出它(通常在JavaScript中完成),或者是否有一些可以想象的方法从异常中恢复。由于无法从发送非法参数时引发的异常中恢复,因此您不必抓住它。