从它提到的可维护的JavaScript一书中提到:
// Bad: Testing to see if an argument was passed
function doSomething(arg1, arg2, arg3, arg4){
if (arg4 != null){
doSomethingElse();
}
}
但我觉得在这里使用!= null
是非常有效的,它过滤了未传递的参数或传递为null的情况
为什么作者认为它不好?
答案 0 :(得分:9)
!= null
, undefined
为false,它基本上代表x !== null && x !== undefined
。 !=
会输入强制类型,其中一个影响就是它将null
和undefined
视为等效(null == undefined
为真)。
因此,除非您需要,否则有些人建议您不要将!=
与null
(或undefined
)一起使用。
你是完全正确的,代码可以抵御两种(实际上是三种)可能性:
根本没有为参数传递任何。
null
已通过。
undefined
已通过。
但是评论说这是一种测试参数是否通过的不好方法,它是:因为它没有捕获传递null
或undefined
。 (传入null
而不传入任何是不同的情况。)这并不一定意味着检查特定函数的参数是一种坏方法。
答案 1 :(得分:0)
不确定。在javascript中,您可以拥有null
值和undefined
值。他们不一样。检查arg是否有效的快速简便方法可能是:
if (arg4)
这样你检查arg4不是null,不是未定义,不是假。请注意这最后一个条件,你可以在这里有意识地告知虚假价值: - )
编辑:T.J。克劳德就在这里。这很容易使用,并且在大多数情况下都可以使用,但要小心。
答案 2 :(得分:0)
我强烈建议观看http://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare - 这是自己创作的人的精彩演讲。
答案 3 :(得分:-1)
因为您可以将任何内容传递给函数,所以 null 。如果您愿意,请执行以下操作:
var obj = new MyObject();
// ...
obj = null;
// ...
doSomething(arg1, arg2, arg3, obj);
你会传递一个参数,但你的检查会失败,因为传递的引用是 null 。始终使用以下内容:
if(typeof arg4 != 'undefined')
// ...