5

在这里举一个示例函数:

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);
}

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

4

2 回答 2

5

当没有参数传递时,bis undefined, not null。因此,测试参数是否存在的正确方法b是:

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

!====推荐,因为如果你使用or可以强制 null 和 undefined 相等!=,但是使用!==or===不会做类型强制,所以你可以严格判断它是否是undefined

于 2012-08-12T21:16:48.530 回答
2

undefined您可以使用(a parameter, which is in fact undefined, not没有传递的参数)的虚假性质,null只需编写:

(!b)?1:2

然而,对于0,null""(假值) 也是如此。

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

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

更新:感谢 EcmaScript 2015,我们现在可以使用默认参数

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

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

于 2012-08-12T21:01:57.030 回答