为啥这个 if 语句以非布尔值成功?

Posted

技术标签:

【中文标题】为啥这个 if 语句以非布尔值成功?【英文标题】:Why does this if statement succeed with a non-boolean value?为什么这个 if 语句以非布尔值成功? 【发布时间】:2022-01-10 22:12:03 【问题描述】:
var m = 5;
if (m) 
    document.write(m);

在我看来,m 不是 bool 类型,因此,这个 if 语句不会被执行。但是,我确实看到我的屏幕上打印了 m 的值。为什么?

【问题讨论】:

该值不需要是布尔值。条件将值评估为真或假。 【参考方案1】:

您应该阅读有关真值的信息 (MDN)。

javascript 中,真值是在布尔上下文中遇到时被视为 true 的值。所有值都是真实的,除非它们被定义为虚假(即,false00n""nullundefinedNaN 除外)。

0 以外的任何数字都是真实的,所以if(5)if(true) 相同。

【讨论】:

然后是浏览器特定的虚假值document.all,尽管它是一个对象,但它是虚假的。这是出于历史原因... :-)

以上是关于为啥这个 if 语句以非布尔值成功?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 if 语句中使用这个布尔值?

布尔值不适用于 If 语句(Javascript)

为啥这个数组到二维数组布尔值是真的?

使用布尔值的 If 语句的语法

为啥在 if 语句中使用双感叹号?

使用 if 语句处理布尔值