JavaScript:当“tri元”或“if”语句的“condition”部分不包括“==”或“>=”时

JavaScript: When the `condition` portion of a `ternary` or `if` statement does not include `===` or `>=`

本文关键字:不包括 gt 语句 tri if JavaScript condition      更新时间:2023-09-26

在以下ternary语句的condition部分中,playlist.length等于playlist.length >= 1吗?

var playlist = ["video1", "video2", "video3", "video4", "video5"];
// some code here
alert ((playlist.length) ?
     playlist.length + "video(s) remain in the playlist: " + playlist.join (", ") + "." 
    : "No videos remain in the playlist");

同样,在下面的代码片段中,! playlist.length等于playlist.length === 0吗?

alert ((! playlist.length) ?
     "No videos in the playlist."
    : playlist.length + " video(s) remain in the playlist: " + playlist.join(", ") + ".");

这是我第一次看到ternaryif语句的condition部分不包括===>=这样的符号的示例。所以我不知道该怎么解释。

0在JavaScript中的布尔比较中被隐式转换为false。所以当长度为0时,这是错误的。相反,在JavaScript中的布尔比较中,任何其他数字都会隐式转换为true。因此,当长度不是0时,它是真的。

一个简单的测试是使用!!来查看的"真实"值

!!1 === true
!!0 === false
!!6 === true

?左侧的部分仅评估"真实性"。值0是"falsy",因此在测试中评估为false。0以外的数值是"truish",因此为此目的,计算为true。

三元的所有其他行为都是相同的。

===!==只是添加了一个附加约束,即L值和R值也必须是相同的类型。

两者非常相似:!playlist.lengthplaylist.length === 0

然而,它们并不是完全相同的。事实上,这里:

var playlist1 = [];
var playlist2 = {};
!playlist1.length // true
!playlist2.length // true
playlist1.length === 0 // true
playlist1.length === 0 // false

从这个意义上讲,!playlist.length也可以用于所有类型的对象,而不仅仅是数组。

在任何情况下,当在数组上使用此选项时,它都是一种检查数组是否为空的方法,并且可以按照您的建议工作,与playlist.length === 0相同。

在javascript中,0等于false,任何其他数值都等于true,但如果使用===,它也会比较值类型。