将多个参数控制成函数的最佳代码结构

时间:2017-03-16 11:08:07

标签: javascript

我想优化我的代码以将多个参数控制为一个函数。

就像这个例子:

getEvaluation ( _val1, _val2, _val3, _val4) {
 let val_1 = _val1.trim(), 
     val_2 = _val2.trim(),
     val_3 = _val3.trim(),
     val_4 = _val4.trim();
 let validation = true;


        if ( typeof val_1 !== 'string' && val_1 !== null && val_1 !==  undefined && val_1.length > 0 ) {
            validation = false;
        }
        if ( typeof val_2 !== 'string' && val_2 !== null && val_2 !==  undefined && val_2.length !== 31  ) {
            validation = false;
        }
        if ( typeof val_3 !== 'string' && val_3 instanceof date ) {
            validation = false;
        }
        if ( typeof val_4 !== 'number' && val_4 < 1 && val_4 > 10 ) {
            validation = false;
        } 
return validation; 
}

这个例子的最佳实践是什么。

2 个答案:

答案 0 :(得分:2)

我看过很多以不同方式处理可选参数的API,但我通常使用以下规则(可能有例外):

如果我必须传递许多参数,我将它们包装在一个对象中,所以

function funcA(a,b,c,d,e,f) {
   //a lot of ifs to check each param
}

变为:

function funcA(paramObj) {
  if (paramObj.a) { //is "a" populated?
    ...
  }
}

使用这种方法,可选参数没有问题,你不必检查第一个参数是否实际上是第二个参数,因为第一个参数是ommited。此外,如果您更新API添加或删除参数,您的代码可以轻松向后兼容。

但是如果我的函数只收到少于4个参数,我命令他们先把强制性参数和后面的可选函数放在:

function myFunc (a, b [,c] [,d]) {...}

顺便说一句,您的代码存在一些问题:

  • 在检查它们是否为字符串之前调用trim()不是一个好主意
  • 我猜你想用||而不是&amp;&amp;在你的支票上。

答案 1 :(得分:0)

我建议在函数参数中使用一个JavaScript对象,而不是传递所有这些参数