为什么使用"!= null"来测试是否传递参数是不好的

cae*_*ang 8 javascript

从它提到的可维护的JavaScript这本书中提到:

// Bad: Testing to see if an argument was passed
function doSomething(arg1, arg2, arg3, arg4){
if (arg4 != null){
    doSomethingElse();
  }
}
Run Code Online (Sandbox Code Playgroud)

但我觉得!= null在这里使用是非常有效的,它过滤了未传递的参数或传递为null的情况

为什么作者认为它是坏的?

T.J*_*der 9

!= null这是假的undefined,它基本上意味着x !== null && x !== undefined.!=确实类型强制,其中一个影响是它对待nullundefined等同(null == undefined是真的).

所以,除非你想的是,有些人建议不使用!=null(或undefined).

而且你的代码可以防御两种(实际上是三种)可能性,这是非常正确的:

  1. 根本没有通过论证.

  2. null 通过了.

  3. undefined 通过了.

但评论说,测试一个参数是否被传递是一种不好的方法,它是:因为它没有捕获传递nullundefined.(null传入而不传入任何东西都是不同的情况.)这并不一定意味着检查特定函数的参数是一种不好的方法.