请您指点一下在JavaScript中跳过可选参数的好方法。跳过JavaScript中的可选功能参数
例如,在这里我想扔掉所有opt_
参数:
goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content, {'Cache-Control': 'no-cache'}, opt_timeoutInterval)
请您指点一下在JavaScript中跳过可选参数的好方法。跳过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是如何完成的。
只是通过null
作为参数值。
补充:你也可以在最后跳过所有后续可选参数要传递真正的价值(在这种情况下,你可以跳过opt_timeoutInterval
参数的话)
你是什么意思跳?您可以传入null
,并且完全可以忽略尾随参数(在这种情况下为opt_timeoutInterval
),但您需要确保您的Cache-Control参数成为第五个参数。
goog.net.XhrIo.send(url, null, null, null, {'Cache-Control': 'no-cache'});
如果您并不需要将Cache-Control:
goog.net.XhrIo.send(url);
其他API带参数的哈希,使可选参数更容易(和命名,因此自我记录的许多参数),但是在位置参数是预期的,你必须去那。
最安全的赌注是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"
。语义关闭。
随着开发人员继续写日益健全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"
类型,但它的整个工作是一种不是真正的类型。这就是为什么它是未初始化变量所假定的值,以及函数的默认返回值。
+1的方式。我不知道它的确做了什么(与undefined相同),但它确实最适合“跳过可选参数”。 – Thilo
我发现你永远不能确定要通过什么而不是“跳过”参数。未定义?空值? 0?空串?空物体?阵列? **如果省略参数中没有文字说明的行为,或者没有默认参数,那么您遇到很大麻烦**。如果更新外部库,则无法保持良好睡眠状态。只有上帝,也许图书馆开发人员可以知道如果您通过任何意想不到的事情而不是所需的参数会发生什么。一般来说,如果这种行为没有记录在案,这些错误在你身上 – Dan
这仍然适用于2017年的最新谷歌浏览器版本,所以我upvoting。 – Anonymous