Στη JavaScript, οι αριθμοί μπορούν να συγκριθούν χρησιμοποιώντας τους παρακάτω τελεστές σχέσης και ισότητας.
| Σύγκριση | Τελεστής |
|---|---|
| Μεγαλύτερο από | a > b |
| Μεγαλύτερο ή ίσο με | a >= b |
| Μικρότερο από | a < b |
| Μικρότερο ή ίσο με | a <= b |
| (Αυστηρή) Ισότητα | a === b |
| Μη (αυστηρή) ισότητα | a !== b |
Το αποτέλεσμα της σύγκρισης είναι πάντα μια τιμή Boolean (λογική τιμή), δηλαδή είτε true είτε false.
1 < 3;
// => true
2 !== 2;
// => false
1 === 1.0;
// => true
// All numbers are floating-points, so this is different syntax
// for the exact same value.
Στη JavaScript, οι παραπάνω τελεστές σύγκρισης μπορούν να χρησιμοποιηθούν και για τη σύγκριση συμβολοσειρών. Σε αυτή την περίπτωση εφαρμόζεται λεξικογραφική σειρά. Μπορείς να βρεις μια λίστα με την ακριβή σειρά όλων των χαρακτήρων εδώ.
'Apple' > 'Pear';
// => false
'a' < 'above';
// => true
'a' === 'A';
// => false
Πρέπει να προσέχεις όταν συγκρίνεις δύο μεταβλητές που φαίνεται να περιέχουν αριθμητικές τιμές αλλά ο τύπος τους είναι συμβολοσειρά.
Λόγω της λεξικογραφικής σειράς, το αποτέλεσμα δεν θα είναι το ίδιο με τη σύγκριση τιμών τύπου Number.
10 < 2;
// => false
'10' < '2';
// => true (because "1" comes before "2")
Ένας άλλος τρόπος για να συγκρίνεις συμβολοσειρές είναι η μέθοδος localeCompare. Σου επιτρέπει να ορίσεις διάφορες επιλογές που ρυθμίζουν τον τρόπο με τον οποίο συγκρίνονται οι συμβολοσειρές.
Ίσως αναρωτιέσαι για τα τρία σύμβολα ίσον στον έλεγχο ισότητας στη JavaScript.
Το === αντιπροσωπεύει τον έλεγχο της αυστηρής ισότητας, που σημαίνει ότι δεν πραγματοποιείται καμία μετατροπή τύπου και τιμές διαφορετικών τύπων είναι πάντα άνισες.
'3' === 3;
// => false
// The value on the left has type string, the value on the right
// has type number.
1 === 1n;
// => false
// The value on the left has type number, the value on the right
// has type bigint.
Η χρήση των === και !== είναι ο προτεινόμενος τρόπος για τον έλεγχο ισότητας στη JavaScript.
Υπάρχουν επίσης τα == και != που αντιπροσωπεύουν τον έλεγχο της χαλαρής ισότητας.
Καλό είναι να τα αποφεύγεις, γιατί εφαρμόζουν έμμεση μετατροπή τύπου πριν εκτελέσουν τη σύγκριση.
Τα αποτελέσματα σε αυτές τις περιπτώσεις είναι δύσκολο να προβλεφθούν και μερικές φορές δεν είναι αυτά που θα περίμενες.
Μπορείς να διαβάσεις περισσότερα εδώ.
0 == false;
// => true
Θεωρητικά, μπορείς επίσης να συγκρίνεις τιμές διαφορετικών τύπων (π.χ., "1" < 2).
Τότε οι τιμές μετατρέπονται έμμεσα για να προσδιοριστεί αν το αποτέλεσμα είναι αληθές ή ψευδές.
Όπως και ο έλεγχος χαλαρής ισότητας, έτσι κι αυτό δεν συνιστάται, για τον ίδιο λόγο που αναφέραμε παραπάνω.
Τι πρέπει να κάνεις αντ' αυτού; Μπορείς να εφαρμόσεις ρητή μετατροπή τύπων. Έτσι μπορείς στη συνέχεια να βεβαιωθείς ότι οι τιμές έχουν τον σωστό τύπο πριν εκτελέσεις τη σύγκριση. Τότε ο κώδικάς σου θα είναι πιο εύκολος στην κατανόηση και λιγότερο επιρρεπής σε σφάλματα.