I lite längre ord, och med klatschig färg:
Den är ett resultat av att använda jämförelseoperatorer ("lika med", "större än", "större än eller lika med", "mindre än", etc.) och logiska operatorer ("och", "eller", "inte"). Varför man jämför strängmetoden indexOf med talet −1 beror på hur den är utformad (−1 betyder att strängen inte hittades; ett icke-negativt tal betyder att strängen hittades på den position som talet anger; ett arv från språket C, kan man säga).
Ett jämförande påstående som "x > 7" (alltså "x är större än 7") ger "sant" eller "falskt". I detta fall så är det uttryck du citerar bara en logisk kombination av flera sådana uttryck, som i slutändan kommer reduceras till ett enda "sant" eller "falskt".
Man kan skriva ut jämförelseuttrycket som:
(
nua.indexOf('Mozilla/5.0') > -1
&&
nua.indexOf('Android ') > -1
&&
nua.indexOf('AppleWebKit') > -1
)
&&
!(nua.indexOf('Chrome') > -1)
där varje "lång" rad är en jämförelse, som i sig kommer resultera i en boolean. Låt säga att det första blocket evalueras och alla tre test ger true
. Detta block kommer då i praktiken lyda (true && true && true)
, vilket logiskt kommer ytterligare reduceras till ett enda true
. Vi kan nu skriva uttrycket som:
true
&&
!(nua.indexOf('Chrome') > -1)
Vi ser att uttrycket med den kvarstående jämförelseoperatorn kommer att ge antingen "falskt" eller "sant" beroende på om strängen 'Chrome'
ingår i variabeln nua
eller ej. Låt säga att strängen ingår i nua
; då får vi:
vilket efter att ha inkluderat den logiska negationen ger
Den logiska operatorn &&
("och") ger "sant" om både uttrycket till vänster och uttrycket till höger är sanna. Det gäller inte här, så då reduceras uttrycket till
och vi har nått en boolean.
Uttrycket reduceras alltså med hjälp av jämförelse- och logikoperatorer tills bara en boolean återstår.