在JavaScript中跳过可选的函数参数

时间:2011-12-02 12:17:56

标签: javascript function-parameter

请您指出在JavaScript中跳过可选参数的好方法。

例如,我想在这里抛弃所有opt_个参数:

goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content, {'Cache-Control': 'no-cache'}, opt_timeoutInterval)

3 个答案:

答案 0 :(得分:99)

解决方案:

goog.net.XhrIo.send(url, undefined, undefined, undefined, {'Cache-Control': 'no-cache'})

您应该使用undefined而不是要跳过的可选参数,因为这100%模拟了JavaScript中可选参数的默认值。

小例子:

myfunc(param);

//is equivalent to

myfunc(param, undefined, undefined, undefined);

强烈推荐:如果您有很多参数,请使用JSON,并且您可以在参数列表的中间使用可选参数。看看这是如何在jQuery中完成的。

答案 1 :(得分:27)

简短回答

最安全的赌注是undefined,并且几乎无处不在。但最终,你不能欺骗被调用的函数,以为你真的省略了一个参数。

如果您发现自己倾向于使用null因为它更短,请考虑将名为_的变量声明为undefined的简短缩写:

(function() { // First line of every script file
    "use strict";
    var _ = undefined; // For shorthand
    // ...
    aFunction(a, _, c);
    // ...
})(); // Last line of every script

详细

首先,要知道:

  • typeof undefined评估为"undefined"
  • typeof null评估为"object"

假设一个函数接受一个它期望为"number"类型的参数。如果您提供null作为值,则会给它"object"。语义已关闭。 1

随着开发人员继续编写越来越强大的javascript代码,您调用的函数显式检查undefined的参数值而非经典if (aParam) {...}的可能性越来越大。如果您继续nullundefined交替使用,只是因为他们都强迫false

,您将处于不稳定状态。

请注意,事实上,函数可以判断参数是否实际被省略(而不是设置为undefined):

f(undefined); // Second param omitted
function f(a, b) {
    // Both a and b will evaluate to undefined when used in an expression
    console.log(a); // undefined
    console.log(b); // undefined
    // But...
    console.log("0" in arguments); // true
    console.log("1" in arguments); // false
}

<强>脚注

  1. 虽然undefined也不是"number"类型,但它的整个工作是一个不是真正类型的类型。这就是为什么它是未初始化变量所假定的值,以及函数的默认返回值。

答案 2 :(得分:5)

只需将null作为参数值传递。

补充:您还可以在最后一个要传递实际值之后跳过所有后续可选参数(在这种情况下,您可以完全跳过opt_timeoutInterval参数)