Μετατροπές Τύπων ECMAScript

Μια από τις πιο σημαντικές χαρακτηριστικές ιδιότητες όλων των γλωσσών προγραμματισμού είναι η ικανότητα μετατροπής τύπου.

Η ECMAScript παρέχει στους προγραμματιστές πολλά απλά μεθόδους μετατροπής τύπου.

Οι περισσότεροι τύποι έχουν μεθόδους για απλές μετατροπές, και υπάρχουν επίσης μερικές παγκόσμιες μεθόδους για πιο σύνθετες μετατροπές. Είτε σε περίπτωση, οι μετατροπές τύπου στην ECMAScript είναι σύντομες ενέργειες.

Μετατροπή σε αλφαβητική ακολουθία

Το ενδιαφέρον των πρωτογενών τιμών Boolean, αριθμών και αλφαβητικών ακολουθιών της ECMAScript είναι ότι είναι ψευδοαντικείμενα, που σημαίνει ότι έχουν ιδιότητες και μεθόδους.

Για παράδειγμα, για να λάβετε το μέγεθος μιας αλφαβητικής ακολουθίας, μπορείτε να χρησιμοποιήσετε τον παρακάτω κώδικα:

var sColor = "red";

Αν και η

Συνοψίζοντας, οι τρεις κύριοι πρωτογενείς τύποι Boolean, αριθμοί και αλφαβητικές ακολουθίες έχουν το μέθοδο toString(), μπορούν να μετατρέψουν τις τιμές τους σε αλφαβητικές ακολουθίες.

Σημείωση:Εσείς μπορείτε να ρωτήσετε,

Η μέθοδος toString() του τύπου Boolean εκτυπώνει απλώς "true" ή "false", και η ένδειξη εξαρτάται από την τιμή της μεταβλητής:

var bFound = false;
alert(bFound.toString());	//Εκτυπώνει "false"

Η μέθοδος toString() του τύπου Number είναι πολύ đặcια, καθώς έχει δύο μοτίβα, δηλαδήΠροεπιλεγμένη μορφήκαιΜοτίβο βάσηςΜε την προεπιλεγμένη μορφή, η μέθοδος toString() εκτυπώνει απλώς τη τιμή του αριθμού (είτε είναι ολόκληρος αριθμός, δεκαδικός αριθμός ή αριθμός σε επιστημονική καταγραφή), όπως εδώ:

var iNum1 = 10;
var iNum2 = 10.0;
alert(iNum1.toString());	//Εκτυπώνει "10"
alert(iNum2.toString());	//Εκτυπώνει "10"

Note:Στην προεπιλεγμένη μορφή, ανεξάρτητα από τη μορφή που ανακοινώθηκε αρχικά, η μέθοδος toString() του τύπου Number επιστρέφει πάντα τη δεκαδική εκδοχή του αριθμού. Επομένως, οι αριθμοί που ανακοινώνονται ως οκταδικοί ή δεκαεξαδικοί λογισμικοί αριθμοί εκτυπώνονται ως δεκαδικοί.

Χρησιμοποιώντας το μοτίβο βάσης της μεθόδου toString() του τύπου Number, μπορείτε να χρησιμοποιήσετε διαφορετικάΒάσηΕκτυπώστε τον αριθμό, π.χ. η βάση της δυαδικής είναι 2, η βάση της οκταδικής είναι 8, και η βάση της δεκαεξαδικής είναι 16.

ΒάσηΕίναι απλώς μια άλλη μορφή της αριθμητικής που πρέπει να μετατραπεί, και είναι ο παράμετρος της μεθόδου toString():

var iNum = 10;
alert(iNum.toString(2));	//Εκτυπώνει "1010"
alert(iNum.toString(8));	//Εκτυπώνει "12"
alert(iNum.toString(16));	//Εκτυπώνει "A"

Στο προηγούμενο παράδειγμα, ο αριθμός 10 εκτυπώθηκε σε τρεις διαφορετικές μορφές, δηλαδή η δυαδική, η οκταδική και η δεκαεξαδική μορφή. Η HTML χρησιμοποιεί τη δεκαεξαδική μορφή για να εκφράσει κάθε χρώμα, και αυτή η λειτουργία είναι πολύ χρήσιμη όταν επεξεργάζεστε αριθμούς στην HTML.

Note:Η κλήση toString(10) για αριθμούς είναι ίση με τη κλήση toString(), και και οι δύο επιστρέφουν τη δεκαδική μορφή του αριθμού.

Δείτε επίσης:

Δείτε Εγχειρίδιο αναφοράς του JavaScriptΠροσφέρουμε λεπτομέρειες για τη μεθόδο toString():

Μετατροπή σε αριθμό

Το ECMAScript παρέχει δύο τρόπους μετατροπής μη αριθμητικών αρχικών τιμών σε αριθμούς, δηλαδή parseInt() και parseFloat().

Ως μπορείτε να φανταστείτε, ο πρώτος μετατρέπει τις τιμές σε ακέραιους, ο δεύτερος σε δεκαδικούς αριθμούς. Μόνο όταν καλείτε αυτούς τους τρόπους σε τύπο String, μπορούν να λειτουργήσουν σωστά; Όταν καλούνται σε άλλους τύπους, επιστρέφουν NaN.

parseInt()

Πριν από τον έλεγχο αν η συμβολοσειρά είναι τιμή αριθμού, ο τρόπος parseInt() και ο τρόπος parseFloat() θα αναλύσουν προσεκτικά τη συμβολοσειρά.

Ο τρόπος parseInt() πρώτα ελέγχει τον χαρακτήρα στη θέση 0, να δει αν είναι έγκυρος αριθμητικός χαρακτήρας; Αν δεν είναι, ο τρόπος θα επιστρέψει NaN και δεν θα συνεχίσει να εκτελεί άλλες ενέργειες. Αλλά αν ο χαρακτήρας είναι έγκυρος αριθμητικός χαρακτήρας, ο τρόπος θα ελέγξει τον χαρακτήρα στη θέση 1, να κάνει τον ίδιο έλεγχο. Αυτός ο διαδικασία θα συνεχιστεί μέχρι να βρει έναν μη έγκυρο αριθμητικό χαρακτήρα, οπότε ο τρόπος θα μετατρέψει τη συμβολοσειρά πριν από αυτόν τον χαρακτήρα σε αριθμό.

Για παράδειγμα, αν θέλετε να μετατρέψετε τη συμβολοσειρά "12345red" σε ακέραιο, ο τρόπος parseInt() θα επιστρέψει 12345, επειδή όταν ελέγχει τον χαρακτήρα r, θα σταματήσει τον έλεγχο.

Οι αριθμητικές τιμές των συμβολοσειρών θα μετατραπούν σωστά σε αριθμούς, όπως "0xA" θα μετατραπεί σωστά σε αριθμό 10. Ωστόσο, η συμβολοσειρά "22.5" θα μετατραπεί σε 22, επειδή για τους ακέραιους, το σημείο είναι μη έγκυρος χαρακτήρας.

Παραδείγματα όπως εξής:

var iNum1 = parseInt("12345red");	//επιστροφή 12345
var iNum1 = parseInt("0xA");	//επιστροφή 10
var iNum1 = parseInt("56.9");	//επιστροφή 56
var iNum1 = parseInt("red");	//επιστροφή NaN

Ο τρόπος parseInt() έχει επίσης μοτίβα βάσης, μπορεί να μετατρέψει τις συμβολοσειρές δυαδικού, οκταδικού, δεκαδικού ή οποιουδήποτε άλλου συστήματος βάσης σε ακέραια. Η βάση καθορίζεται από τον δεύτερο παράγοντα του τρόπου parseInt(), οπότε για να αναλύσετε τιμές δεκαδικού, πρέπει να καλέσετε τον τρόπο parseInt() ως εξής:

var iNum1 = parseInt("AF", 16);	//επιστροφή 175

Φυσικά, για το δυαδικό, οκταδικό και ακόμα και το δεκαδικό (προεπιλεγμένο μοτίβο), μπορείτε να καλέσετε τον τρόπο parseInt() έτσι:

var iNum1 = parseInt("10", 2);	//επιστροφή 2
var iNum2 = parseInt("10", 8);	//returns 8
var iNum3 = parseInt("10", 10);	//returns 10

If the decimal number contains a leading 0, it is better to use base 10 to avoid accidentally getting an octal value. For example:

var iNum1 = parseInt("010");	//returns 8
var iNum2 = parseInt("010", 8);	//returns 8
var iNum3 = parseInt("010", 10);	//returns 10

In this code, both lines of code parse the string "010" into a number. The first line treats the string as an octal value, parsing it in the same way as the second line (declaring the base as 8). The last line declares the base as 10, so iNum3 finally equals 10.

Δείτε

Δείτε Εγχειρίδιο αναφοράς του JavaScriptDetailed information about the parseInt() method provided:parseInt().

parseFloat()

The parseFloat() method handles the same as the parseInt() method, starting from position 0 to view each character until the first non-valid character is found, and then convert the string before that character to an integer.

However, for this method, the first decimal point encountered is a valid character. If there are two decimal points, the second decimal point is considered invalid. parseFloat() will convert the characters before the decimal point to a number. This means that the string "11.22.33" will be parsed as 11.22.

Another difference in using the parseFloat() method is that the string must represent the floating-point number in decimal form, not in octal or hexadecimal. This method ignores leading 0, so the octal number 0102 will be parsed as 102. For the hexadecimal number 0xA, this method will return NaN, because x is not a valid character in floating-point numbers. (Note:The specific browser implementation will return 0 instead of NaN after testing.)

Additionally, the parseFloat() method does not have a base pattern.

The following are some examples of using the parseFloat() method:

var fNum1 = parseFloat("12345red");	//returns 12345
var fNum2 = parseFloat("0xA");	//returns NaN
var fNum3 = parseFloat("11.2");	//returns 11.2
var fNum4 = parseFloat("11.22.33");	//returns 11.22
var fNum5 = parseFloat("0102");	//επιστρέφει 102
var fNum1 = parseFloat("red");	//επιστρέφει NaN

Δοκιμάστε το προσωπικά

Δείτε

Δείτε Εγχειρίδιο αναφοράς του JavaScriptΠροσφέρουμε λεπτομέρειες για τη συνάρτηση parseFloat():parseFloat().

Μετατροπή τύπου

Μπορείτε επίσης να χρησιμοποιήσετεΜετατροπή τύπου (type casting)Για να χειριστείτε τους τύπους των τιμών που πρέπει να μετατραπούν. Η μετατροπή τύπου επιτρέπει την πρόσβαση σε συγκεκριμένες τιμές, ακόμα και αν είναι άλλου τύπου.

Σημείωση του συγγραφέα:Η λέξη "cast" σημαίνει "χύτευση", κάτι που ταιριάζει καλά στην έννοια της "εντολής μετατροπής τύπου".

Τα 3 διαθέσιμα τύποι μετατροπής τιμών στο ECMAScript είναι:

  • Boolean(value) - Μετατρέπει την τιμή σε τύπο Boolean;
  • Number(value) - Μετατρέπει την τιμή σε αριθμό (μπορεί να είναι ολόκληρος αριθμός ή δεκαδικός αριθμός);
  • String(value) - Μετατρέπει την τιμή σε συμβολοσειρά;

Με τη χρήση μιας από αυτές τις τρεις συναρτήσεις μετατροπής τιμών, δημιουργείται μια νέα τιμή που αποθηκεύει την τιμή που μετατρέπεται άμεσα από την αρχική τιμή. Αυτό μπορεί να προκαλέσει απρόβλεπτες συνέπειες.

Η συνάρτηση Boolean()

Όταν η τιμή που πρέπει να μετατραπεί είναι μια συμβολοσειρά με τουλάχιστον έναν χαρακτήρα, ένα μη μηδενικό αριθμό ή ένα αντικείμενο, η συνάρτηση Boolean() θα επιστρέψει true. Αν η τιμή είναι κενή συμβολοσειρά, αριθμός 0, undefined ή null, θα επιστρέψει false.

Μπορείτε να δοκιμάσετε τη μετατροπή των τύπων Boolean με τον παρακάτω κώδικα:

var b1 = Boolean("");		//false - κενή συμβολοσειρά
var b2 = Boolean("hello");		//true - μη κενή συμβολοσειρά
var b1 = Boolean(50);		//true - μηδενικό αριθμός
var b1 = Boolean(null);		//false - null
var b1 = Boolean(0);		//false - μηδέν
var b1 = Boolean(new object());	//true - αντικείμενο

Η συνάρτηση Number()

Η συνάρτηση Number() μετατρέπει τις τιμές με τρόπο παρόμοιο με τις συναρτήσεις parseInt() και parseFloat(), αλλά μετατρέπει την ολόκληρη τιμή, όχι μόνο μέρος της.

Θυμάστε; η συνάρτηση parseInt() και η συνάρτηση parseFloat() μετατρέπουν μόνο τη συμβολοσειρά πριν από τον πρώτο μη έγκυρο χαρακτήρα, οπότε η "1.2.3" θα μετατραπεί σε "1" και "1.2" αντίστοιχα.

Με τη χρήση του Number(), το "1.2.3" θα επιστρέψει NaN, επειδή ολόκληρη η τιμή του řetěτζα δεν μπορεί να μετατραπεί σε αριθμό. Αν η τιμή του řetέτζα μπορεί να μετατραπεί πλήρως, η λειτουργία Number() θα κρίνει αν θα καλέσει τη λειτουργία parseInt() ή parseFloat().

Η παρακάτω τаблицή περιγράφει τι θα συμβεί όταν καλείται η λειτουργία Number() για διαφορετικές τιμές:

Χρήση Αποτελέσματα
Number(false) 0
Number(true) 1
Number(undefined) NaN
Number(null) 0
Number("1.2") 1.2
Number("12") 12
Number("1.2.3") NaN
Number(new object()) NaN
Number(50) 50

Λειτουργία String()

Η τελευταία μέθοδος υποχρεωτικής μετατροπής τύπου String() είναι η πιο απλή, επειδή μπορεί να μετατρέψει οποιαδήποτε τιμή σε řetězec.

Για να εκτελέσετε αυτή τη μετατροπή τύπου, απλά καλέστε τη μέθοδο toString() του τιμής που μεταφέρεται ως παράμετρος, δηλαδή μετατρέψτε 12 σε "12", true σε "true", false σε "false", κ.λπ.

Η μοναδική διαφορά μεταξύ της υποχρεωτικής μετατροπής τύπου σε řetězec και της κλήσης της μεθόδου toString() είναι ότι η υποχρεωτική μετατροπή τύπου για τιμές null και undefined μπορεί να δημιουργήσει ένα řetězec χωρίς να προκαλέσει σφάλμα:

var s1 = String(null);	// "null"
var oNull = null;
var s2 = oNull.toString();	// Θα προκαλέσει σφάλμα

Η υποχρεωτική μετατροπή τύπου είναι πολύ χρήσιμη κατά τη διαχείριση γλωσσών όπως το ECMAScript, οι οποίες είναι 弱otypes, αλλά πρέπει να διασφαλιστεί ότι χρησιμοποιούνται οι σωστές τιμές.