关于javascript:为什么使用“!= null”来测试是否传递参数是不好的

Why it is not good to use “!= null” to test if argument is passed

本问题已经有最佳答案,请猛点这里访问。

从书中提到的可维护的javascript:

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

但我觉得在这里使用!= null是相当有效的,它既过滤了没有通过的论点,也过滤了作为空值传递的论点。

作者有什么理由认为这是坏的?


!= nullfor undefined是假,它基本上x !== null && x !== undefined均值。!=coercion做型,和一个影响,这是它与作为等价对待nullundefined(null == undefinedis true)。

除非你希望,一些人建议使用!=困境与null(或undefined)。

和你很好的代码,这对双(三defends是好的:)的可能性

  • 没有什么在所有的参数传递。

  • 什么null传递。

  • 什么undefined传递。

  • 但有评论说,这是一个坏的方式来测试是否在参数传递和它是什么,因为它不捕捉:undefinednull或传递。(在困境中null传递和传递都是不同的情况下)。这不一定意味着这是一个坏的方式来检查一个特定的功能参数。


    我会强烈建议看http:/ / /演示文稿www.infoq.com零引用的万亿美元的错误- Tony Hoare a艳表示在这个物从人谁创造了它自己。


    当然。在JavaScript中,你可以有nullundefined值和值。和他们不一样。a快速和容易的方法来检查,如果Arg是有效的可能会是:

    if (arg4)

    这是一个重要的方式,你需要检查未定义的,和不为零,返回false。请小心这一负载状态通知,你可以在这里:a false价值自觉)

    编辑:T.J.克罗德是在这里。它的易于使用的和最想在这工作的情况,但要小心。


    因为你的护照什么功能,所以零。如果你是到下面的:

    1
    2
    3
    4
    5
    var obj = new MyObject();
    // ...
    obj = null;
    // ...
    doSomething(arg1, arg2, arg3, obj);

    你会通过你的论据,但因为传递参考故障检查会是零。总是使用下面的:

    1
    2
    if(typeof arg4 != 'undefined')
        // ...