它在《可维护的JavaScript》一书中提到:
// Bad: Testing to see if an argument was passed
function doSomething(arg1, arg2, arg3, arg4){
if (arg4 != null){
doSomethingElse();
}
}但我觉得在这里使用!= null是非常有效的,它过滤了参数未传递或作为null传递的情况
作者认为它很糟糕的原因是什么?
发布于 2013-07-16 22:17:10
对于undefined,!= null为false,它基本上表示x !== null && x !== undefined。!=确实存在类型强制,其效果之一是它将null和undefined等同起来(null == undefined为真)。
因此,除非您希望这样,否则有些人建议不要将!=与null (或undefined)一起使用。
您说得很对,代码防御了两种(实际上是三种)可能性:
传递了passed.
undefined时,all.
null处的参数但评论说,这是一种测试参数是否被传递的糟糕方法,事实的确如此:因为它没有捕捉到传递null或undefined。(传入null和不传入任何内容是不同的情况。)这并不一定意味着这是检查特定函数的参数的坏方法。
发布于 2013-07-16 22:19:17
好的。在javascript中,你可以有null值和undefined值。它们是不一样的。检查arg是否有效的一种快速简单的方法可能是:
if (arg4)
这样你就可以检查arg4 is not null,not undefined,And not false。请注意最后一个条件,您可能会在此处有意识地通知错误值:-)
编辑: T.J. Crowder就在这里。这很容易使用,并且在大多数情况下都可以工作,但要小心。
发布于 2013-07-16 22:38:38
我强烈推荐观看http://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare --这是他本人在这件事上的精彩演讲。
https://stackoverflow.com/questions/17678934
复制相似问题