【发布时间】:2012-08-12 20:58:42
【问题描述】:
这里以函数为例:
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);
}
^ 这似乎有效,但这是最好的方法吗?
【问题讨论】:
-
如果你通过
undefined那么你会得到一个假阴性。arguments.length(或变体)是查看参数是否通过的唯一方法。 -
@Esailija 如果函数的意图不是明确使用未定义的值,那么 imo 应该没问题。捕获所有可能的用户错误不是函数的责任。
-
@Christoph 如果您真的需要知道是否传递了参数,那就不行了。如果您只想知道参数是否为空或其他,那么
!= null!== undefined等等都一样脆弱和好,这没有防弹。更喜欢!= null同时检查undefined和null。 -
@Esailija 如果函数不接受未定义的值,则参数是否以
undefined的值传递或根本没有参数都无关紧要。但是null表示传递了一个参数,因为它与undefined不同,如果没有传递参数,情况就是这样。所以我不会检查!=null -
这就是为什么我说如果你真的需要知道 :P 当然不正常需要知道。
标签: javascript function parameters typeof