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

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


!x将返回true为每一个“falsy”值(空字符串, 0nullfalseundefinedNaN ),而x == null只会返回true ,如果x null (编辑:或明显undefined (见下文))。

尝试x = 0 ,有一个区别。

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

另外,如果你用==比较值,JavaScript会进行类型转换,这会导致意外的行为(如undefined == null )。 最好始终使用严格的比较=== (值和类型必须相同),并且只有在您确实知道自己在做什么的情况下才能使用类型转换。

有些东西要读:

  • 数据类型转换
  • 比较运算符
  • 逻辑运算符

  • 更新:

    有关nullundefined (或通常的比较)的非严格比较的更多信息,值得看看规范。 比较算法在那里定义(比较是x == y ):

  • 如果类型(x)与类型(y)相同,则
    (......)
  • 如果x为null且y 未定义 ,则返回true
  • 如果x 未定义且y为 ,则返回true
  • (......)
  • (......)


    如果x为假,NaN,''(空字符串),undefined(使用严格比较运算符===)或0(零),结果可能不同。

    请参阅Felix Kling的答案,了解类型比较的优秀摘要。


    说x是一个字符串。

    x = undefined;
    if(!x) {
       alert("X is not a truthy value");
    }
    if(x == null) {
       alert("X is null");
    }
    
    x = "";
    if(!x) {
       alert("X is not a truthy value");
    }
    if(x == null) {
       alert("X is null");
    }
    
    x = null;
    if(!x) {
       alert("X is not a truthy value");
    }
    if(x == null) {
       alert("X is null");
    }
    

    在所有三种情况下,您都会注意到“X不是真值”,但仅在X未定义或null为“X is null”的情况下显示。

    当X是布尔值时,当X为假但(x == null)不会时, (!x)将为真。 对于数字0和NaN被认为是错误的值,所以不是X是真的。

    在行动中看到它,包括== (使用类型转换的平等)和=== (严格相等)之间的区别。

    链接地址: http://www.djcxy.com/p/76347.html

    上一篇: JavaScript: What is the difference between `if (!x)` and `if (x == null)`?

    下一篇: Every Object is a function and every function is Object