当我运行此代码时,if-块中的代码将被执行。我的假设是如果某个东西,它是null还是未定义?有人能解释一下吗?
const num = 0;
if (!num) {
console.log('Why on earth does this get printed');
}
您的假设不正确。当您将一个值隐式转换为类似的布尔值时,它将根据truthy和falsy规则进行转换。错误值为0
、""
、NaN
、null
、undefined
,当然还有false
。(另外,有趣的是,浏览器上的document.all
。(所有其他值都是truthy。如果num
是0
,那么if (!num)
将为真,因为您已经否定了一个错误的值(使其成为true
(。
如果你只想检查null
和undefined
,你可以使用== undefined
或num == null
(注意:==
,而不是===
(,这对它们都是正确的:
if (num == null) {
console.log("num is null or undefined");
}
==
的规则是,null
和undefined
都是== undefined
(也是== null
(,但其他都不是。
或者,也许更清楚:
if (num === null || num === undefined)
console.log("num is null or undefined");
}
- 使用if语句时,只有在圆括号中的表达式返回true时,才会执行大括号中的代码
- 变量num分配了0
- 变量num将被转换为false,因为0已分配给它
- 在Javascript中,被称为"bang"的感叹号("!"(符号是逻辑"not"运算符。放置在布尔值前面,它将反转该值,返回相反的值
- 正因为如此,你才会在花括号里得到正确的答案
- 这就是代码执行的原因