使用null检查传递的参数 - JavaScript

时间:2012-08-12 20:58:43

标签: javascript function parameters typeof

在这里举一个例子:

function a(b){
    console.log(b != null ? 1 : 2);
}

该代码工作正常,如果传递参数则打印1,如果不传递,则打印2。

然而,JSLint给了我一个警告,告诉我改为使用严格的平等,即!==。无论是否传递参数,该函数在使用!==时都会打印1。

所以我的问题是,检查参数是否已通过的最佳方法是什么?我不想使用arguments.length,或者实际上根本不使用arguments对象。

我试过用这个:

function a(b){
    console.log(typeof(b) !== "undefined" ? 1 : 2);
}

^似乎有效,但它是最好的方法吗?

2 个答案:

答案 0 :(得分:4)

如果没有传递参数,bundefined,而不是null。因此,测试参数b是否存在的正确方法是:

function a(b){
    console.log(b !== undefined ? 1 : 2);
}
建议使用

!==,因为如果您使用==!=,则null和undefined可以强制相等,但使用!=====则不会做类型强制,这样你就可以严格判断它是否undefined

答案 1 :(得分:2)

你可以使用undefined的虚假性质(一个参数,实际上没有传递undefined,而不是null)并且只写:

(!b)?1:2

0null""(假值)也是如此。

如果你想以防弹的方式写它,你可以去:

typeof(b) === "undefined"
// or thanks to the write protection for undefined in html5
b === undefined

更新:感谢EcmaScript 2015,我们现在可以使用default parameters

function a(b = 1){
    console.log(b);
}

如果一个参数未定义 - 无论是ommited还是明确地移交(这里你应该使用null) - 将使用默认值,所有其他值保持不变(也是假的)。 Demonstration