如何编写函数,以便在未定义参数时省略代码?

时间:2019-05-10 18:03:30

标签: javascript parameters arguments

我正在使用Javascript编写自动测试用例以执行GUI操作。我正在编写一个函数来处理被测软件上的一些基本“初始化”操作,但我希望可以选择不必将每个参数都放入参数中。

所以我有一个基本上可以做到这一点的函数:

function initializeApp(arg1,arg2,arg3,arg4)
{
    action1(arg1);
    action2(arg2);
    action3(arg3);
    action4(arg4);
}

但是可以说我不想执行动作4,现在,“ action4”块中包含的代码将无法处理没有arg4输入的情况,并且会崩溃。因此,我想解决该问题的惯用方式是创建一堆ifelse if语句,如果未定义该参数,它们实际上将跳过不同的代码块。这是一个示例:

function testIES(configFile, recordFile, overwrite, scriptFile)
{
    if (arg1 == undefined)
    {
        action2(arg2);
        action3(arg3);
        action4(arg4);
    } else if (arg2 == undefined)
    {
        action1(arg1);
        action3(arg3);
        action4(arg4);
    } else if (arg3 == undefined)
    {
        action1(arg1);
        action2(arg2);
        action4(arg4);
    } else if (arg4 == undefined)
    {
        action1(arg1);
        action2(arg2);
        action3(arg3);
    }
}

但是,这种方法有一个明显的缺陷,那就是如果我希望能够排除一个以上的论点,就需要提出“动作”的每种组合。如果其他任何人想要这样做也不是很友好,因为他们必须知道不要遗漏一个以上的论点。那么,我最好的选择就是简单地提出所有不同的组合吗?或者,还有更好的方法?当然,有更好的方法。

2 个答案:

答案 0 :(得分:0)

这允许传递未定义的和假的:

function initializeApp(arg1,arg2,arg3,arg4)
{
   var len = arguments.length;
    if(len>0)action1(arg1);
    if(len>1)action2(arg2);
    if(len>2)action3(arg3);
    if(len>3)action4(arg4);
}

如果您永远不会传递假值(0,null,false等),则可以使用更简单的形式,例如

if(arg1) action1(arg1);

答案 1 :(得分:0)

您可以获取参数和每个参数的函数数组,然后迭代并检查是否已设置参数,然后在相同的索引处调用函数。

function testIES(...args) {
    [action1, action2, action3, action4].forEach((fn, i) {
        if (args[i] === undefined) return;
        fn(args[i]);
    });
}