【问题标题】:Passing in function parameters that don't exist or are undefined? [duplicate]传入不存在或未定义的函数参数? [复制]
【发布时间】:2013-06-07 07:05:52
【问题描述】:

我想知道如果我有一个接受 4 个参数 a、b、c、d 的函数,但我遇到的情况是我没有为参数 c 传递值但需要传递一个值,那么最佳实践是什么对于参数 d:

function myFunction(a,b,c,d) {
 //...
}

myFunction(paramA, paramB, '', paramD);

您是否为参数 c 传入 undefined,然后在函数内部进行检查或类似的事情?

【问题讨论】:

标签: javascript


【解决方案1】:

更好的是为我使用Object

function myFunction( options ) {
 //...
}

myFunction({
    paramA: "someVal",
    paramD: "anotherVal"
});

然后在函数中你可以检查空参数并传递默认值:

function myFunction( options ) {
    options = options || {};
    options.paramA = options.paramA || "defaultValue";
    // etc...
}    

【讨论】:

    【解决方案2】:

    您可以将任何可选参数设置为最远在您的函数签名中,这样您就可以在调用函数时将它们关闭。

    function myFunction(a, b, d, c) {
        // ...
    }
    
    myFunction(1, 2, 3, 4);
    
    // call without 'c'
    myFunction(1, 2, 3);
    

    【讨论】:

    • 并非在所有情况下都可以交换参数。
    • @Dieshkani 我不确定你想说什么。
    【解决方案3】:

    如果未定义为最简单/可靠的解决方案,我发现设置默认值

    function myFunction(a,b,c,d) {
        if (typeof a === 'undefined') { a = 'val'; }
        if (typeof b === 'undefined') { b = 'val'; }
        if (typeof c === 'undefined') { c = 'val'; }
        if (typeof d === 'undefined') { d = 'val'; }
    }
    

    【讨论】:

    • 不只是if (a === undefined) { a = 'val'; }清洁工吗?
    • 使用undefined 全局变量不一定是最安全的方法,因为全局变量可以被覆盖。 typeof a === 'undefined' 是最全面的恕我直言。
    • 公平点。我确实想知道是否真的值得担心 undefined 被覆盖。此外,在严格模式下,尝试定义 undefined 将引发异常。因此,更常见的严格模式变得越不可能出现这种情况。
    【解决方案4】:

    null 作为您没有的参数传递。 undefined 更专业一些,尽管它们的工作方式相同。

    【讨论】:

      【解决方案5】:

      如果你知道传递了什么参数,你可以使用函数的参数'arguments'。例如:

       function example(a, b, c, d) {
       if (arguments.length < 4) {
         paramC = defaultParam; // something default value for passed C
         }
       }
      

      【讨论】:

        猜你喜欢
        • 2013-11-12
        • 2013-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-22
        • 1970-01-01
        相关资源
        最近更新 更多