2015-12-14 58 views
3

condition部分的以下ternary声明中,playlist.length等于playlist.length >= 1JavaScript:当`ternary`或`if`语句的`condition`部分不包含`===`或`> =`

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

'playlist.length'作为一个条件将检查,如果该属性是未定义或不 –

+0

这是非常习惯。任何布尔值都可以在三元/条件中使用。由于0是虚假的,所以'数组。如果在你的例子中使用这个上下文 – Brennan

+0

,它会检查'playlist.length'是否为零。总的来说,它寻找一个“truthy”声明。 – Sirko

回答

4

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

一个简单的测试是使用!!看到 “truthy” 值

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

0

?左侧的部分仅针对“truthiness”进行评估。值0是“falsy”,因此为测试目的评估为false。 0以外的数字值是“非常”,因此为此目的评估为真。

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

===!==只是简单地增加了额外的约束,即L值和R值也必须是相同的类型。

0

在javascript中0等于假,和任何其他数值等于真实的,但如果你使用===它也会比较值类型。

1

这两者非常相似:!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相同。