9

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

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

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

作者为什么认为它不好?

4

4 回答 4

9

!= null是假的undefined,它基本上意味着x !== null && x !== undefined!=确实类型强制,其效果之一是它将nullundefined视为等效(null == undefined为真)。

因此,除非您愿意,否则有些人建议不要使用!=with null(or undefined)。

你说得对,代码可以抵御两种(实际上是三种)可能性:

  1. 根本没有通过任何论据。

  2. null通过了。

  3. undefined通过了。

但是评论说这是测试参数是否通过的不好方法,它是:因为它没有捕捉到传递nullundefined. (null传入和不传入任何内容是不同的情况。)这并不一定意味着检查特定函数的参数是一种不好的方法。

于 2013-07-16T14:17:09.863 回答
0

当然。在 javascript 中,您可以拥有null值和undefined值。他们不一样。检查 arg 是否有效的一种快速简便的方法可能是:

if (arg4)

这样你检查 arg4 不是 null,不是 undefined,也不是 false。请注意最后一个条件,您可能会在此处有意识地告知错误值:-)

编辑:TJ Crowder 就在这里。它很容易使用,并且在大多数情况下都可以使用,但要小心。

于 2013-07-16T14:19:16.987 回答
0

我强烈建议您观看http://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare - 一个由他自己创造的人关于这个问题的精彩演讲。

于 2013-07-16T14:38:37.780 回答
-1

因为您可以将任何内容传递给函数,也可以传递null。如果您要执行以下操作:

var obj = new MyObject();
// ...
obj = null;
// ...
doSomething(arg1, arg2, arg3, obj);

您将传递一个参数,但您的检查将失败,因为传递的引用是null。始终使用以下内容:

if(typeof arg4 != 'undefined')
    // ...
于 2013-07-16T14:17:18.203 回答