2015-12-14 59 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相同。