检查函数参数是否是JavaScript中的默认值

时间:2014-04-30 07:42:45

标签: javascript function parameters default

假设我有这样的功能

function functionName(parameter = 5) {

}

如果该参数的值已被更改,是否可以检查函数内部?我的意思是,如果有人像这样调用函数" functionName()"默认值不会被更改,但如果它被调用如此" functionName(10)",它的值会有所不同,

3 个答案:

答案 0 :(得分:2)

唯一(有效)的方法是只显式检查值:

function functionName(parameter = 5) {
    if(parameter == 5){
        // parameter is default;
    }
}

请注意,此类可选参数尚未得到广泛支持(它是ES6 +)。 “旧”方法将是这样的:

function functionName(parameter) {
    if(typeof parameter=== "undefined"){
        parameter = "defaultValue";
        // parameter is default;
    }
}

这样做的好处是能够毫无疑问地确定是否传递了参数(除非您通过undefined)。在第一个示例中,传递的5将无法与未传递的参数区分开来。

答案 1 :(得分:2)

我不是说这是一个好主意(如果你真的需要知道,我可能只是不使用默认参数并检查undefined),但你可以通过查看arguments伪数组来判断。例如:

  function myFunction(parameter = 5) {
    if (arguments.length === 0) {
      console.log("parameter = " + parameter + " (DEFAULT)");
    }
    else {
      console.log("parameter = " + parameter + " (provided)");
    }
  }
  myFunction();
  myFunction(5);
  myFunction(6);

输出

parameter = 5 (DEFAULT)
parameter = 5 (provided)
parameter = 6 (provided)

如您所见,您可以判断您是否知道parameter是第一个参数,arguments.length0。或者,如果function myFunction(a = 5, b = 6, c = 7) c arguments.length <= 2 arguments,则arguments知道<!DOCTYPE html> <html> <head> <meta charset=utf-8 /> <title>Default Args</title> </head> <body> <script> (function() { "use strict"; function myFunction(parameter = 5) { if (arguments.length === 0) { display("parameter = " + parameter + " (DEFAULT)"); } else { display("parameter = " + parameter + " (provided)"); } } myFunction(); myFunction(5); myFunction(6); function display(msg) { var p = document.createElement('p'); p.innerHTML = String(msg); document.body.appendChild(p); } })(); </script> </body> </html> 已被默认。

draft specification的{{1}}部分直到最新版本大部分只是ES5规范的副本,但2014年4月已更新{{1}}更改的详细信息。我没有机会搞砸了斯特朗德的散文,但我希望在那里有所涉及。

Full Live Example - 仅适用于最近的Firefox

{{1}}

答案 2 :(得分:0)

在没有传递参数的情况下,您是否在寻找默认值?

    function myFunction(parameter) {

        parameter = parameter || 5;
    }

或者您可以访问arguments变量以更好地检查参数。