Vi kender mange sammenligningsoperatorer fra matematik.
I JavaScript skrives de sådan her:
- Større end/Mindre end:
a > b,a < b. - Større end eller lig med/Mindre end eller lig med:
a >= b,a <= b. - Lighed:
a == b, bemærk at dobbelt lighedstegn==betyder lighedstest, mens et enkelta = bbetyder en tildeling. - Ulighed: I matematik er notationen
≠, men i JavaScript skrives det soma != b.
I denne artikel vil vi lære mere om forskellige typer sammenligninger, hvordan JavaScript udfører dem, og vigtige ting at være opmærksomme på.
Til sidst vil du få en opskrift til at undgå problemer relateret til “JavaScript quirks”.
Boolean er resultatet
Alle sammenligningsoperatorer returnerer en boolean værdi:
true– betyder “ja”, “korrekt” eller “sandheden”.false– betyder “nej”, “forkert” eller “ikke sandheden”.
For eksempel:
alert( 2 > 1 ); // true (correct)
alert( 2 == 1 ); // false (wrong)
alert( 2 != 1 ); // true (correct)
Et sammenligningsresultat kan tildeles en variabel, ligesom enhver anden værdi:
let result = 5 > 4; // assign the result of the comparison
alert( result ); // true
Sammenligning af tekststrenge
For at se, om en tekststreng er større end en anden, bruger JavaScript den såkaldte “ordbogs-” eller “leksikografiske” rækkefølge.
Sagt på en anden måde, sammenlignes tekststrenge bogstav for bogstav.
For eksempel:
alert( 'Z' > 'A' ); // true
alert( 'Glow' > 'Glee' ); // true
alert( 'Bee' > 'Be' ); // true
Algoritmen til at sammenligne to tekststrenge er simpel:
- Sammenlign det første tegn i begge tekststrenge.
- Hvis det første tegn i den første tekststreng er større (eller mindre) end det tilsvarende tegn i den anden tekststreng, så er den første tekststreng større (eller mindre) end den anden. Vi er færdige.
- Ellers, hvis begge tekststrenges første tegn er ens, sammenlignes de andet tegn på samme måde.
- Gentag indtil slutningen af en af tekststrengene.
- Hvis begge tekststrenge ender ved samme længde, er de lige. Ellers er den længste tekststreng større.
I eksemplet ovenfor når sammenligningen 'Z' > 'A' til et resultat ved det første trin.
Den anden sammenligning 'Glow' og 'Glee' kræver flere trin, da tekststrengene sammenlignes tegn for tegn:
Ger det samme somG.ler det samme soml.oer større ende. Stop her. Den første tekststreng er større.
Sammenligningsalgoritmen givet ovenfor svarer omtrent til den, der bruges i ordbøger eller telefonbøger, men det er ikke helt det samme.
For eksempel betyder store og små bogstaver noget. Et stort bogstav "A" er ikke det samme som det lille "a". Hvilket er større? Det lille "a". Hvorfor? Fordi det lille bogstav har en større indeks i den interne kodningstabel, som JavaScript bruger (Unicode). Vi vender tilbage til specifikke detaljer og konsekvenser af dette i kapitlet Tekststrenge (Strings).
Sammenligning af forskellige typer
Når værdier af forskellige typer sammenlignes, konverterer JavaScript værdierne til tal.
For eksempel:
alert( '2' > 1 ); // true, string '2' becomes a number 2
alert( '01' == 1 ); // true, string '01' becomes a number 1
For boolean værdier, bliver true til 1 og false til 0.
For eksempel:
alert( true == 1 ); // true
alert( false == 0 ); // true
Det er muligt, at på samme tid:
- To værdier er lige.
- Den ene er
truesom en boolean og den anden erfalsesom en boolean.
For eksempel:
let a = 0;
alert( Boolean(a) ); // false
let b = "0";
alert( Boolean(b) ); // true
alert(a == b); // true!
Fra JavaScripts synspunkt er dette resultat helt normalt. En lighedstjek konverterer værdier ved hjælp af numerisk konvertering (derfor bliver "0" til 0), mens den eksplicitte Boolean-konvertering bruger et andet sæt regler.
Streng lighed (strict equality)
Et almindeligt lighedstjek == har et problem. Det kan ikke skelne 0 fra false: