简短的回答
最安全的选择是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"
所以假设一个函数接受一个它期望是 type 的参数"number"
。如果你提供null
一个值,你给它一个"object"
. 语义已关闭。1
随着开发人员继续编写越来越健壮的 javascript 代码,undefined
与经典的if (aParam) {...}
. 如果您继续null
互换使用 withundefined
只是因为它们都强制转换为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"
,但它的全部工作是成为一个不是真正类型的类型。这就是为什么它是未初始化变量假定的值,以及函数的默认返回值。