Συνδυαστικοί υπολογιστές ECMAScript

Οι συναρτήσεις σύγκρισης εκτελούν σύγκριση. Κάθε συναρτήτης σύγκρισης επιστρέφει μια αξονική τιμή.

Κανονική μέθοδος σύγκρισης

Οι συναρτήσεις σύγκρισης:<, >, <= και >= εκτελούν σύγκριση δύο αριθμών με τον ίδιο τρόπο όπως οι αριθμητικές συναρτήσεις σύγκρισης.

Κάθε συναρτήτης σύγκρισης επιστρέφει μια αξονική τιμή:

var bResult1 = 2 > 1	//true
var bResult2 = 2 < 1	//false

Ωστόσο, η χρήση των συναρτήσεων σύγκρισης για δύο αλφαβητικές αλγόριθμους έχει διαφορετική συμπεριφορά. Κάποιοι πιστεύουν ότι το "<" σημαίνει "πριν" στην αλφαβητική σειρά" και το">" σημαίνει "μετά", αλλά αυτό δεν είναι αληθές. Για τις αλφαβητικές αλγόριθμους, κάθε χαρακτήρας του πρώτου αλφαβητικού συγκρίνεται με τον αντίστοιχο χαρακτήρα του δεύτερου αλφαβητικού. Μετά τη συγκριτική πράξη, επιστρέφεται ένας αξονικός τιμή.

var bResult = "Blue" < "alpha";
alert(bResult);	//εκτυπώνει true

Στο παραπάνω παράδειγμα, η αλφαβητική σειρά του字符串 "Blue" είναι μικρότερη από "alpha", επειδή ο κώδικας του γράμματος B είναι 66 και ο κώδικας του γράμματος a είναι 97. Για να λάβουμε τη σύγκριση με βάση την πραγματική αλφαβητική σειρά, πρέπει να μετατρέψουμε τις δύο αριθμητικές τιμές σε ίδια μορφή γραμματοσειράς (πλήρως κεφαλαία ή πλήρως πεζά) και στη συνέχεια να τις συγκρίνουμε:

var bResult = "Blue".toLowerCase() < "alpha".toLowerCase();
alert(bResult);	//Εκτυπώνει false

Μετατρέποντας τους δύο αριθμούς σε μικρά γράμματα, διασφαλίζεται η σωστή αναγνώριση ότι το "alpha" βρίσκεται στην αλφαριθμητική σειρά πριν από το "Blue".

Συγκριτική λογιστική αριθμού και αλφαριθμητικής

Μια άλλη δύσκολη κατάσταση συμβαίνει όταν συγκρίνεις δύο αριθμούς που είναι σε μορφή αλφαριθμητικής, όπως:

var bResult = "25" < "3";
alert(bResult);	//Εκτυπώνει "true"

Το παρακάτω κομμάτι κώδικα συγκρίνει τη αλφαριθμητική "25" και τον αριθμό "3". Και οι δύο αριθμοί είναι αλφαριθμητικοί, οπότε συγκρίνονται με τον χαρακτήρα τους (ο χαρακτήρας "2" είναι 50, ο χαρακτήρας "3" είναι 51).

Ωστόσο, αν ο ένας από τους δύο αριθμούς είναι αριθμός, τότε το αποτέλεσμα είναι ενδιαφέρον:

var bResult = "25" < 3;
alert(bResult);	//Εκτυπώνει "false"

Εδώ, η αλφαριθμητική "25" θα μετατραπεί σε αριθμό 25 και θα συγκριθεί με τον αριθμό 3, όπως αναμενόταν.

Παράδειγμα, όταν συγκρίνεις έναν αριθμό και μια αλφαριθμητική, το ECMAScript θα μετατρέψει την αλφαριθμητική σε αριθμό και θα συγκρίνει τις δύο τιμές σε αριθμητική σειρά.

Ωστόσο, τι γίνεται αν η αλφαριθμητική αλφαριθμητική δεν μπορεί να μετατραπεί σε αριθμό; Σκεφτείς το παρακάτω παράδειγμα:

var bResult = "a" < 3;
alert(bResult);

Μπορείς να προβλέψεις τι θα εκτυπώσει αυτό το κομμάτι κώδικα; Το γράμμα "a" δεν μπορεί να μετατραπεί σε νόμιμο αριθμό. Ωστόσο, αν το καλέσεις το parseInt(), επιστρέφει NaN. Σύμφωνα με τους κανόνες, οποιαδήποτε αναλογιστική λογιστική που περιέχει NaN πρέπει να επιστρέψει false, οπότε αυτό το κομμάτι κώδικα επίσης επιστρέφει false:

var bResult = "a" >= 3;
alert(bResult);

Γενικά, αν οι δύο τιμές που χρησιμοποιούνται στον λογισμό είναι μικρότερες από την τιμή, τότε η λογιστική πρέπει να επιστρέψει true, αλλά αν η τιμή είναι NaN, η κατάσταση δεν είναι έτσι.