JavaScript:`if(!x)`和`if(x == null)`有什么区别?

Xav*_*ier 21 javascript

if (!x)和之间有什么区别if (x == null); 也就是说,什么时候他们的结果会有所不同?

Fel*_*ing 51

!x将返回true的每一个"falsy"值(空字符串0,null,false,undefined,NaN),而x == null将只返回true,如果x null(编辑:或明显undefined(见下文)).

试试x = 0,有区别.

您可以说NOT运算符! 值转换为其相反的布尔等效值.这与实际比较两个值不同.

此外,如果您比较值==,JavaScript会进行类型转换,这会导致意外行为(例如undefined == null).最好总是使用严格的比较===(值和类型必须相同),并且只有在你真正知道自己在做什么时才使用类型转换.

要阅读的内容:


更新:

有关非严格比较nullundefined(或一般比较)的更多信息,有必要查看规范.比较算法在那里定义(比较是x == y):

  1. 如果Type(x)与Type(y)相同,那么
    (...)
  2. 如果Xÿ不确定的,返回.
  3. 如果X不确定的Ÿ,返回.
  4. (......)

(......)

  • "undefined == null"也返回true.这就是为什么你最好使用"x === null". (5认同)