为什么当变量 = 0 时,if - 块>>>> if(!variable) <<<<<被执行?



当我运行此代码时,if-块中的代码将被执行。我的假设是如果某个东西,它是null还是未定义?有人能解释一下吗?

const num = 0;
if (!num) {
console.log('Why on earth does this get printed');
}

您的假设不正确。当您将一个值隐式转换为类似的布尔值时,它将根据truthyfalsy规则进行转换。错误值为0""NaNnullundefined,当然还有false。(另外,有趣的是,浏览器上的document.all。(所有其他值都是truthy。如果num0,那么if (!num)将为真,因为您已经否定了一个错误的值(使其成为true(。

如果你只想检查nullundefined,你可以使用== undefinednum == null(注意:==,而不是===(,这对它们都是正确的:

if (num == null) {
console.log("num is null or undefined");
}

==的规则是,nullundefined都是== undefined(也是== null(,但其他都不是。

或者,也许更清楚:

if (num === null || num === undefined)
console.log("num is null or undefined");
}
  • 使用if语句时,只有在圆括号中的表达式返回true时,才会执行大括号中的代码
  • 变量num分配了0
  • 变量num将被转换为false,因为0已分配给它
  • 在Javascript中,被称为"bang"的感叹号("!"(符号是逻辑"not"运算符。放置在布尔值前面,它将反转该值,返回相反的值
  • 正因为如此,你才会在花括号里得到正确的答案
  • 这就是代码执行的原因

最新更新