⊗jsPmBsATC 43 of 505 menu

Αυτόματη μετατροπή τύπων δεδομένων

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

let a = '123';

Σε αυτήν την περίπτωση, η μεταβλητή a είναι επίσης μια συμβολοσειρά, αλλά με μια ορισμένη ιδιαιτερότητα.

Η ουσία της ιδιαιτερότητας είναι η εξής: εάν εκτελέσετε μια μαθηματική πράξη σε μια συμβολοσειρά με ψηφία - αυτή η πράξη θα εκτελεστεί σαν να έχουμε πραγματικά αριθμούς, και όχι συμβολοσειρές:

alert('2' * '3'); // εμφανίζει 6

Σε αυτήν την περίπτωση, το JavaScript βλέπει ότι προσπαθούμε να εκτελέσουμε μια πράξη που δεν είναι επιτρεπτή για συμβολοσειρές, αλλά είναι επιτρεπτή για αριθμούς.

Βλέπει επίσης ότι ουσιαστικά οι συμβολοσειρές μας είναι αριθμοί σε εισαγωγικά. Επομένως, το JavaScript αυτόματα εκτελεί τη μετατροπή αυτών των συμβολοσειρών σε αριθμούς και εκτελεί την αντίστοιχη μαθηματική πράξη πάνω τους.

Αυτό λειτουργεί εάν στις συμβολοσειρές μας υπάρχουν μόνο ψηφία. Εάν υπάρχει έστω και ένα γράμμα - το JavaScript θα θεωρήσει την πράξη μη έγκυρη και θα κάνει το αποτέλεσμά της την τιμή NaN:

alert('2' * '3s'); // εμφανίζει NaN

Εκτός από αυτό, η αυτόματη μετατροπή συμβαίνει εάν η πράξη είναι μαθηματικά σωστή, αλλά μη επιτρεπτή για συμβολοσειρές.

Για παράδειγμα, οι συμβολοσειρές δεν μπορούν (ενώ οι αριθμοί μπορούν) να πολλαπλασιαστούν, να διαιρεθούν, να αφαιρεθούν, επομένως σε όλες αυτές τις πράξεις θα υπάρχει αυτόματη μετατροπή συμβολοσειρών με ψηφία σε αριθμούς.

Ωστόσο, οι συμβολοσειρές, όπως και οι αριθμοί, προστίθενται με τον τελεστή +. Αυτό σημαίνει ότι στην περίπτωση της πρόσθεσης δεν θα γίνει αυτόματη μετατροπή:

let a = '1' + '2'; alert(a); // εμφανίζει '12' - έγινε πρόσθεση συμβολοσειρών

Εάν ένας από τους προσθετέους είναι αριθμός, και ο άλλος - συμβολοσειρά, τότε πάντα κερδίζει η συμβολοσειρά:

let a = 1 + '2'; alert(a); // εμφανίζει '12'

Σε τέτοιες περιπτώσεις, το JavaScript, αντίθετα, αυτόματα μετατρέπει τους αριθμούς σε συμβολοσειρές και εκτελεί την πρόσθεση συμβολοσειρών.

Υπάρχουν, ωστόσο, ιδιαιτερότητες, όταν οι προσθετέοι είναι περισσότεροι από δύο: σε αυτήν την περίπτωση, η μετατροπή σε έναν συγκεκριμένο τύπο εξαρτάται από τη σειρά εκτέλεσης των πράξεων.

Στο επόμενο παράδειγμα, αρχικά το 2 και το 3 θα προστεθούν ως αριθμοί, και στη συνέχεια το αποτέλεσμα θα προστεθεί στη συμβολοσειρά '1' ήδη ως συμβολοσειρά '5', που τελικά θα δώσει τη συμβολοσειρά '15':

let a = '1' + (2 + 3); alert(a); // εμφανίζει '15'

Εάν, ωστόσο, αφαιρέσετε τις παρενθέσεις, τότε όλα θα προστίθενται από αριστερά προς τα δεξιά. Δηλαδή πρώτα στη συμβολοσειρά '1' θα προστεθεί ο αριθμός 2 και ως αποτέλεσμα θα προκύψει η συμβολοσειρά '12'. Στη συνέχεια, σε αυτήν τη συμβολοσειρά θα προστεθεί ο αριθμός 3 και ως αποτέλεσμα θα προκύψει η συμβολοσειρά '123':

let a = '1' + 2 + 3; alert(a); // εμφανίζει '123'

Ωστόσο, στο επόμενο παράδειγμα, οι αριθμοί 2 και 3 γράφτηκαν στην αρχή, επομένως πρώτα θα προστεθούν ως αριθμοί, δίνοντας ως αποτέλεσμα τον αριθμό 5, και στη συνέχεια σε αυτόν τον αριθμό θα προστεθεί η συμβολοσειρά '1', δίνοντας τελικά τη συμβολοσειρά '51':

let a = 2 + 3 + '1'; alert(a); // εμφανίζει '51'

Χωρίς να εκτελέσετε τον κώδικα, προσδιορίστε τι θα εμφανιστεί στην οθόνη:

let a = '5' + '2'; alert(a);

Χωρίς να εκτελέσετε τον κώδικα, προσδιορίστε τι θα εμφανιστεί στην οθόνη:

let a = '5' + 2; alert(a);

Χωρίς να εκτελέσετε τον κώδικα, προσδιορίστε τι θα εμφανιστεί στην οθόνη:

let a = 5 + '2'; alert(a);

Χωρίς να εκτελέσετε τον κώδικα, προσδιορίστε τι θα εμφανιστεί στην οθόνη:

let a = 5 + 2; alert(a);

Χωρίς να εκτελέσετε τον κώδικα, προσδιορίστε τι θα εμφανιστεί στην οθόνη:

let a = '5' * '2'; alert(a);

Χωρίς να εκτελέσετε τον κώδικα, προσδιορίστε τι θα εμφανιστεί στην οθόνη:

let a = '5' - '2'; alert(a);

Χωρίς να εκτελέσετε τον κώδικα, προσδιορίστε τι θα εμφανιστεί στην οθόνη:

let a = '5' / '2'; alert(a);

Χωρίς να εκτελέσετε τον κώδικα, προσδιορίστε τι θα εμφανιστεί στην οθόνη:

let a = '5' % '2'; alert(a);

Χωρίς να εκτελέσετε τον κώδικα, προσδιορίστε τι θα εμφανιστεί στην οθόνη:

let a = '5s' * '2'; alert(a);

Χωρίς να εκτελέσετε τον κώδικα, προσδιορίστε τι θα εμφανιστεί στην οθόνη:

let a = '5s' + '2'; alert(a);

Χωρίς να εκτελέσετε τον κώδικα, προσδιορίστε τι θα εμφανιστεί στην οθόνη:

let a = (-'5') + (-'2'); alert(a);

Χωρίς να εκτελέσετε τον κώδικα, προσδιορίστε τι θα εμφανιστεί στην οθόνη:

let a = '5' * 1 + '2' * 1; alert(a);

Χωρίς να εκτελέσετε τον κώδικα, προσδιορίστε τι θα εμφανιστεί στην οθόνη:

let a = '5' * '1' + '2' * '1'; alert(a);

Χωρίς να εκτελέσετε τον κώδικα, προσδιορίστε τι θα εμφανιστεί στην οθόνη:

let a = '' + 3 + 1; alert(a);
Ελληνικά
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Χρησιμοποιούμε cookie για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη