JavaScript:if(!x)`和if(x == null)`有什么区别?
if (!x)和if (x == null)之间的区别是什么? 也就是说,他们的结果何时会不同?
!x将返回true为每一个“falsy”值(空字符串, 0 , null , false , undefined , NaN ),而x == null只会返回true ,如果x 为 null (编辑:或明显undefined (见下文))。
尝试x = 0 ,有一个区别。
你可以说那个NOT运算符! 将值转换为其相反的布尔等值。 这与实际比较两个值不同。
另外,如果你用==比较值,JavaScript会进行类型转换,这会导致意外的行为(如undefined == null )。 最好始终使用严格的比较=== (值和类型必须相同),并且只有在您确实知道自己在做什么的情况下才能使用类型转换。
有些东西要读:
更新:
有关null和undefined (或通常的比较)的非严格比较的更多信息,值得看看规范。 比较算法在那里定义(比较是x == y ):
(......)
(......)
如果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是真的。
在行动中看到它,包括== (使用类型转换的平等)和=== (严格相等)之间的区别。
上一篇: JavaScript: What is the difference between `if (!x)` and `if (x == null)`?
下一篇: Every Object is a function and every function is Object
