目前,我有一个定义如下的函数:
function a(b,c) {
if (typeof(b) === "undefined") { b = 1; }
if (typeof(c) === "undefined") { c = 2; }
...
}
之前,如果值是假的,它会设置为默认值。更改它会中断以下调用:
a(null, 3);
没有未定义的对象。我怎样才能只传递第二个参数?
实际上,有一个未定义的对象:
通常可能有一个未定义的对象,但显然在我的环境中出现了问题
目前,我有一个定义如下的函数:
function a(b,c) {
if (typeof(b) === "undefined") { b = 1; }
if (typeof(c) === "undefined") { c = 2; }
...
}
之前,如果值是假的,它会设置为默认值。更改它会中断以下调用:
a(null, 3);
没有未定义的对象。我怎样才能只传递第二个参数?
实际上,有一个未定义的对象:
通常可能有一个未定义的对象,但显然在我的环境中出现了问题
实际上,有一个undefined对象:
a(undefined, 3);
但是,由于某种原因,它是一个变量,因此有人可以这样做:
undefined = 2;
您的代码将不再起作用。如果您想保护自己免受重新定义的人的影响undefined,您可以这样做:
a(void 0 /* zero's not special; any value will do */, 3);
void前缀运算符接受一个值,丢弃它,然后返回undefined。
检查变量是否存在的一个很好的测试是:
(typeof b === "undefined" || b === null)
因此,您的函数可以这样重写:
function a(b,c) {
if (typeof(b) === "undefined" || b === null) { b = 1; }
if (typeof(c) === "undefined" || b === null) { c = 2; }
...
}
这将解释任何undefined,null或void 0作为参数传递。如果你发现重复,你总是可以定义一个效用函数:
function exists(obj) {
return typeof(obj) === "undefined" || obj === null;
}
而这个精确的测试就是Coffee-script用它的存在运算符所做的?。Coffee-script 也提供默认参数,这将使您的生活更加轻松。
不知道你为什么说没有未定义...
a(undefined, 3)
是你想要的