为什么 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
、""
、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 语句时,仅当圆括号中的表达式 return 为真时,花括号中的代码才会执行。
- 您的变量 num 已分配给它 0。
- 变量 num 将被转换为 false,因为分配给它的是 0
- 在Javascript中,感叹号(“!”)符号,称为“bang”,是逻辑“非”运算符。放在布尔值前面,它将反转值,return相反。
- 因此,您将在花括号内得到 true
- 这就是您的代码执行的原因
当我运行这段代码时,if-块中的代码被执行。我的假设是 if ! something,它要么是 null 或 未定义?谁能解释一下?
const num = 0;
if (!num) {
console.log('Why on earth does this get printed');
}
您的假设不正确。当您将值隐式转换为布尔值时,它会根据 truthy and falsy rules 进行转换。虚假值是 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 语句时,仅当圆括号中的表达式 return 为真时,花括号中的代码才会执行。
- 您的变量 num 已分配给它 0。
- 变量 num 将被转换为 false,因为分配给它的是 0
- 在Javascript中,感叹号(“!”)符号,称为“bang”,是逻辑“非”运算符。放在布尔值前面,它将反转值,return相反。
- 因此,您将在花括号内得到 true
- 这就是您的代码执行的原因