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