简短的回答
最安全的选择是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",但它的全部工作是成为一个不是真正类型的类型。这就是为什么它是未初始化变量假定的值,以及函数的默认返回值。