为什么 if - 块 >>>> if(!variable) <<<<< 在 variable = 0 时执行?

Why does the if - block >>>> if(!variable) <<<<< get executed when variable = 0?

当我运行这段代码时,if-块中的代码被执行。我的假设是 if ! something,它要么是 null未定义?谁能解释一下?

const num = 0;

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

您的假设不正确。当您将值隐式转换为布尔值时,它会根据 truthy and falsy rules 进行转换。虚假值是 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 语句时,仅当圆括号中的表达式 return 为真时,花括号中的代码才会执行​​。
  • 您的变量 num 已分配给它 0。
  • 变量 num 将被转换为 false,因为分配给它的是 0
  • 在Javascript中,感叹号(“!”)符号,称为“bang”,是逻辑“非”运算符。放在布尔值前面,它将反转值,return相反。
  • 因此,您将在花括号内得到 true
  • 这就是您的代码执行的原因