能否请您指出在 JavaScript 中跳过可选参数的好方法。
例如,我想扔掉opt_这里的所有参数:
goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content, {'Cache-Control': 'no-cache'}, opt_timeoutInterval)
能否请您指出在 JavaScript 中跳过可选参数的好方法。
例如,我想扔掉opt_这里的所有参数:
goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content, {'Cache-Control': 'no-cache'}, opt_timeoutInterval)
解决方案:
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 中完成的。
最安全的选择是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) {...}. 如果您继续null交替使用和undefined仅仅因为它们都碰巧强制使用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
}
脚注
undefined也不是 type "number",但它的全部工作是成为一个不是真正类型的类型。这就是为什么它是未初始化变量假定的值,以及函数的默认返回值。只是null作为参数值传递。
补充:您还可以跳过最后一个要传递实际值的后续可选参数(在这种情况下,您可以完全跳过opt_timeoutInterval参数)