请您指出在JavaScript中跳过可选参数的好方法。
例如,我想在这里抛弃所有opt_
个参数:
goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content, {'Cache-Control': 'no-cache'}, opt_timeoutInterval)
答案 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) {...}
的可能性越来越大。如果您继续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
也不是"number"
类型,但它的整个工作是一个不是真正类型的类型。这就是为什么它是未初始化变量所假定的值,以及函数的默认返回值。答案 2 :(得分:5)
只需将null
作为参数值传递。
补充:您还可以在最后一个要传递实际值之后跳过所有后续可选参数(在这种情况下,您可以完全跳过opt_timeoutInterval
参数)