ECMAScript Egaliteit Operatoren
- Vorige pagina Relatieoperator
- Volgende pagina Voorwaardelijke operator
Het bepalen of twee variabelen gelijk zijn is een zeer belangrijke operatie in het ontwerpen van programma's. Bij het verwerken van primitieve waarden is deze operatie vrij eenvoudig, maar bij het verwerken van objecten wordt het een beetje complexer.
ECMAScript biedt twee sets van equivalente operatoren: het gelijkheidsteken en het niet-gelijkheidsteken worden gebruikt om primitieve waarden te verwerken, en het volledige gelijkheidsteken en het volledige niet-gelijkheidsteken worden gebruikt om objecten te verwerken.
Gelijkheidsteken en niet-gelijkheidsteken
In ECMAScript wordt het gelijkheidsteken weergegeven door het dubbele gelijkheidsteken (==), het retourneert true wanneer de twee operatoren gelijk zijn. Het niet-gelijkheidsteken wordt weergegeven door een uitroepsteken gevolgd door een gelijkheidsteken (!=), het retourneert true wanneer de twee operatoren niet gelijk zijn. Om te bepalen of de twee operatoren gelijk zijn, voeren beide operatoren typeconversie uit.
De regels voor het uitvoeren van typeconversie zijn als volgt:
- Als een van de operatoren een Boolean-waarde is, moet deze worden omgezet in een numerieke waarde voordat de equivalente controle wordt uitgevoerd. false wordt omgezet in 0, true in 1.
- Als een van de operatoren een string is en de andere een getal, moet de string worden geprobeerd om te converteren naar een getal voordat de equivalente controle wordt uitgevoerd.
- Als een van de operatoren een object is en de andere een string, moet het object worden geprobeerd om te converteren naar een string voordat de equivalente controle wordt uitgevoerd.
- Als een van de operatoren een object is en de andere een getal, moet het object worden geprobeerd om te converteren naar een getal voordat de equivalente controle wordt uitgevoerd.
Bij het vergelijken, volgt deze operator ook de volgende regels:
- De waarden null en undefined zijn gelijk.
- Bij het controleren van equivalente waarden, mogen null en undefined niet worden omgezet in andere waarden.
- Als een van de operatoren NaN is, retourneert het gelijkheidsteken false, het niet-gelijkheidsteken true.
- Als beide operatoren objecten zijn, wordt vergeleken met hun referentiewaarden. Als beide operatoren hetzelfde object verwijzen, retourneert het gelijkheidsteken true, anders zijn de twee operatoren niet gelijk.
Belangrijke waarschuwing:Zelfs als beide getallen NaN zijn, retourneert het gelijkheidsteken false, omdat volgens de regels NaN niet gelijk is aan NaN.
De volgende tabel somt enkele speciale situaties en hun resultaten op:
expressie | waarde |
---|---|
null == undefined | true |
"NaN" == NaN | false |
5 == NaN | false |
NaN == NaN | false |
NaN != NaN | true |
false == 0 | true |
true == 1 | true |
true == 2 | false |
undefined == 0 | false |
null == 0 | false |
"5" == 5 | true |
Volledige en niet-volledige gelijkheidsteken
De gelijkheidsteken en niet-gelijkheidsteken zijn vergelijkbaar met de volledige en niet-volledige gelijkheidsteken. Deze operatoren doen hetzelfde als de gelijkheidsteken en niet-gelijkheidsteken, maar ze voeren geen typeconversie uit voordat ze de gelijkheid controleren.
De volledige vergelijkingsteken worden weergegeven door drie gelijkheidstekens (===), en ze retourneren alleen true als de operanden zonder typeconversie gelijk zijn.
Bijvoorbeeld:
var sNum = "66"; var iNum = 66; alert(sNum == iNum); // Output "true" alert(sNum === iNum); // Output "false"
In deze code gebruikt de eerste alert een gelijkheidsteken om de string "66" en het getal 66 te vergelijken, en geeft "true" uit. Zoals eerder gezegd, is dit omdat de string "66" wordt omgezet naar het getal 66, voordat het wordt vergeleken met de andere getal 66. De tweede alert gebruikt een volledige vergelijking zonder typeconversie om een string en een getal te vergelijken, natuurlijk, de string is niet gelijk aan het getal, dus het geeft "false" uit.
De niet-identieke vergelijkingsteken worden weergegeven door een exclamationteken plus twee gelijkheidstekens (!==), en ze retourneren alleen true als de operanden zonder typeconversie niet gelijk zijn.
Bijvoorbeeld:
var sNum = "66"; var iNum = 66; alert(sNum != iNum); // Output "false" alert(sNum !== iNum); // Output "true"
Hier, de eerste alert gebruikt een niet-vgelijkheidsteken, om de string "66" om te zetten naar het getal 66, zodat het gelijk is aan de tweede operand 66. Daarom is het berekende resultaat "false", omdat de twee operanden gelijk zijn. De tweede alert gebruikt een niet-identieke vergelijkingsteken. De operatie is de vraag: "sNum" is verschillend van "iNum"? Het antwoord op deze vraag is: ja (true), omdat sNum een string is en iNum een getal, en ze zijn natuurlijk verschillend.
- Vorige pagina Relatieoperator
- Volgende pagina Voorwaardelijke operator