034.2 Μάθημα 1
Πιστοποιητικό: |
Web Development Essentials |
---|---|
Έκδοση: |
1.0 |
Θέμα: |
034 Προγραμματισμός με JavaScript |
Σκοπός: |
034.2 Δομές Δεδομένων JavaScript |
Μάθημα: |
1 απο 1 |
Εισαγωγή
Οι γλώσσες προγραμματισμού, όπως και οι φυσικές γλώσσες, αντιπροσωπεύουν την πραγματικότητα μέσω συμβόλων που συνδυάζονται σε δηλώσεις με νόημα. Η πραγματικότητα που αντιπροσωπεύεται από μια γλώσσα προγραμματισμού είναι οι πόροι του μηχανήματος, όπως οι λειτουργίες του επεξεργαστή, οι συσκευές και η μνήμη.
Κάθε μία από τις μυριάδες γλώσσες προγραμματισμού υιοθετεί ένα paradigm για την αναπαράσταση πληροφοριών. Η JavaScript υιοθετεί συμβάσεις τυπικές των γλωσσών υψηλού επιπέδου, όπου οι περισσότερες λεπτομέρειες όπως ο καταμερισμός μνήμης είναι έμμεσος, επιτρέποντας στον προγραμματιστή να εστιάσει στον σκοπό του script στο πλαίσιο της εφαρμογής.
Γλώσσες Υψηλού Επιπέδου
Οι γλώσσες υψηλού επιπέδου παρέχουν αφηρημένους κανόνες έτσι ώστε ο προγραμματιστής να χρειάζεται να γράψει λιγότερο κώδικα για να εκφράσει μια ιδέα. Η JavaScript προσφέρει βολικούς τρόπους χρήσης της μνήμης του υπολογιστή, χρησιμοποιώντας έννοιες προγραμματισμού που απλοποιούν τη σύνταξη επαναλαμβανόμενων πρακτικών και γενικά επαρκούν για τον σκοπό ενός web προγραμματιστή.
Note
|
Αν και είναι δυνατή η χρήση εξειδικευμένων μηχανισμών για σχολαστική πρόσβαση στη μνήμη, οι απλούστεροι τύποι δεδομένων που θα εξετάσουμε είναι πιο γενικοί σε χρήση. |
Οι τυπικές λειτουργίες σε μια web εφαρμογή συνίστανται σε requests δεδομένων μέσω ορισμένων εντολών JavaScript και στην αποθήκευση τους για επεξεργασία και τελικά παρουσίαση στον χρήστη. Αυτή η αποθήκευση είναι αρκετά ευέλικτη σε JavaScript, με κατάλληλες μορφές αποθήκευσης για κάθε σκοπό.
Δήλωση Σταθερών και Μεταβλητών
Η δήλωση σταθερών [constants] και μεταβλητών [variables] για τη διατήρηση δεδομένων είναι ο ακρογωνιαίος λίθος οποιασδήποτε γλώσσας προγραμματισμού. Η JavaScript υιοθετεί τη σύμβαση των περισσότερων γλωσσών προγραμματισμού, εκχωρώντας τιμές σε σταθερές ή μεταβλητές με τη σύνταξη όνομα = τιμή
. Η σταθερά ή η μεταβλητή στα αριστερά παίρνει την τιμή στα δεξιά. Το όνομα της σταθεράς ή της μεταβλητής πρέπει να ξεκινά με γράμμα ή κάτω παύλα.
Ο τύπος των δεδομένων που αποθηκεύονται στη μεταβλητή δεν χρειάζεται να υποδεικνύεται, επειδή η JavaScript είναι μια dynamic typing γλώσσα. Ο τύπος της μεταβλητής συνάγεται από την τιμή που της έχει εκχωρηθεί. Ωστόσο, είναι βολικό να προσδιορίζονται ορισμένα χαρακτηριστικά στη δήλωση για να διασφαλίζεται το αναμενόμενο αποτέλεσμα.
Note
|
Η TypeScript είναι μια γλώσσα εμπνευσμένη από τη JavaScript που, όπως και οι γλώσσες χαμηλότερου επιπέδου, σας επιτρέπει να δηλώνετε μεταβλητές για συγκεκριμένους τύπους δεδομένων. |
Σταθερές
Μια σταθερά [constant] είναι ένα σύμβολο που εκχωρείται μία φορά κατά την έναρξη του προγράμματος και δεν αλλάζει ποτέ. Οι σταθερές είναι χρήσιμες για τον καθορισμό σταθερών τιμών, όπως ο ορισμός της σταθεράς PI
ως 3.14159265 ή COMPANY_NAME
για την διατήρηση του ονόματος της εταιρείας σας.
Σε μια web εφαρμογή, πάρτε έναν client για παράδειγμα, που λαμβάνει πληροφορίες για τον καιρό από έναν απομακρυσμένο server. Ο προγραμματιστής μπορεί να αποφασίσει ότι η διεύθυνση στον server πρέπει να είναι σταθερή, γιατί δεν θα αλλάξει κατά την εκτέλεση της εφαρμογής. Οι πληροφορίες θερμοκρασίας, ωστόσο, μπορούν να αλλάξουν με κάθε νέα άφιξη δεδομένων από τον server.
Το μεσοδιάστημα μεταξύ των queries που γίνονται στον server μπορεί επίσης να οριστεί ως μια σταθερά, η οποία μπορεί να ζητηθεί από οποιοδήποτε μέρος του προγράμματος:
const update_interval = 10;
function setup_app(){
console.log("Update every " + update_interval + "minutes");
}
Όταν καλείται, το function setup_app()
εμφανίζει το μήνυμα Update every 10 minutes
στην κονσόλα. Ο όρος const
τοποθετημένος πριν από το όνομα update_interval
διασφαλίζει ότι η τιμή του θα παραμείνει η ίδια σε όλη την διάρκεια εκτέλεσης του script. Εάν γίνει προσπάθεια επαναφοράς της τιμής μιας σταθεράς, δίνεται ένα TypeError: Assignment to constant variable
σφάλμα.
Μεταβλητές
Χωρίς τον όρο const
, η JavaScript υποθέτει αυτόματα ότι το update_interval
είναι μια μεταβλητή και ότι η τιμή της μπορεί να τροποποιηθεί. Αυτό ισοδυναμεί με τη ρητή δήλωση της μεταβλητής με var
:
var update_interval;
update_interval = 10;
function setup_app(){
console.log("Update every " + update_interval + "minutes");
}
Σημειώστε ότι παρόλο που η μεταβλητή update_interval
ορίστηκε εκτός του function, η πρόσβαση σε αυτήν έγινε μέσα από το function. Οποιαδήποτε σταθερά ή μεταβλητή που δηλώνεται εκτός functions ή block κώδικα που ορίζονται από άγκιστρα ({}
) έχει global scope· δηλαδή μπορούμε να έχουμε πρόσβαση σε αυτή από οποιοδήποτε μέρος του κώδικα. Το αντίθετο δεν ισχύει: μια σταθερά ή μια μεταβλητή που δηλώνεται μέσα σε ένα function έχει local scope, επομένως είναι προσβάσιμη μόνο εντός του ίδιου του function. Τα block κώδικα που οριοθετούνται με άγκιστρα, όπως αυτά που τοποθετούνται σε δομές απόφασης if
ή for
loops, οριοθετούν το scope των σταθερών, αλλά όχι τις μεταβλητές που δηλώνονται ως var
. Ο παρακάτω κώδικας, για παράδειγμα, είναι έγκυρος:
var success = true;
if ( success == true )
{
var message = "Transaction succeeded";
var retry = 0;
}
else
{
var message = "Transaction failed";
var retry = 1;
}
console.log(message);
To statement console.log(message)
μπορεί να έχει πρόσβαση στη μεταβλητή message
, παρόλο που έχει δηλωθεί εντός του block κώδικα της δομής if
. Το ίδιο δεν θα συνέβαινε εάν το message
ήταν σταθερό, όπως φαίνεται στο ακόλουθο παράδειγμα:
var success = true;
if ( success == true )
{
const message = "Transaction succeeded";
var retry = 0;
}
else
{
const message = "Transaction failed";
var retry = 1;
}
console.log(message);
Σε αυτήν την περίπτωση, θα εκδοθεί ένα μήνυμα σφάλματος τύπου ReferenceError: message is not defined
και το script θα διακοπεί. Αν και μπορεί να φαίνεται σαν περιορισμός, ο περιορισμός του scope των μεταβλητών και των σταθερών βοηθά στην αποφυγή σύγχυσης μεταξύ των πληροφοριών που υποβάλλονται σε επεξεργασία στο σώμα του script και στα διαφορετικά block κώδικά του. Για το λόγο αυτό, οι μεταβλητές που δηλώνονται με let
αντί για var
περιορίζονται επίσης σε εύρος από τα block που οριοθετούνται από άγκιστρα. Υπάρχουν άλλες λεπτές διαφορές μεταξύ της δήλωσης μιας μεταβλητής με var
ή με let
, αλλά η πιο σημαντική από αυτές αφορά το scope της μεταβλητής, όπως συζητείται εδώ.
Τύποι Τιμών
Τις περισσότερες φορές, ο προγραμματιστής δεν χρειάζεται να ανησυχεί για τον τύπο των δεδομένων που είναι αποθηκευμένα σε μια μεταβλητή, επειδή η JavaScript την προσδιορίζει αυτόματα με έναν από τους primitive τύπους κατά την πρώτη εκχώρηση μιας τιμής στη μεταβλητή. Ορισμένες λειτουργίες, ωστόσο, μπορεί να είναι συγκεκριμένες για τον έναν ή τον άλλο τύπο δεδομένων και μπορεί να οδηγήσουν σε σφάλματα όταν χρησιμοποιούνται χωρίς διακριτική ευχέρεια. Επιπλέον, η JavaScript προσφέρει structured τύπους που σας επιτρέπουν να συνδυάσετε περισσότερους από έναν primitive τύπους σε ένα μεμονωμένο αντικείμενο.
Primitive Τύποι
Τα instances primitive τύπου αντιστοιχούν σε παραδοσιακές μεταβλητές, οι οποίες αποθηκεύουν μόνο μία τιμή. Οι τύποι ορίζονται έμμεσα, επομένως ο τελεστής typeof
μπορεί να χρησιμοποιηθεί για να προσδιοριστεί ποιος τύπος τιμής είναι αποθηκευμένος σε μια μεταβλητή:
console.log("Undefined variables are of type", typeof variable);
{
let variable = true;
console.log("Value `true` is of type " + typeof variable);
}
{
let variable = 3.14159265;
console.log("Value `3.14159265` is of type " + typeof variable);
}
{
let variable = "Text content";
console.log("Value `Text content` is of type " + typeof variable);
}
{
let variable = Symbol();
console.log("A symbol is of type " + typeof variable);
}
Αυτό το script θα εμφανίσει στην κονσόλα ποιος τύπος μεταβλητής χρησιμοποιήθηκε σε κάθε περίπτωση:
undefined variables are of type undefined Value `true` is of type boolean Value `3.114159265` is of type number Value `Text content` is of type string A symbol is of type symbol
Παρατηρήστε ότι η πρώτη γραμμή προσπαθεί να βρει τον τύπο μιας αδήλωτης μεταβλητής. Αυτό έχει ως αποτέλεσμα η δεδομένη μεταβλητή να προσδιορίζεται ως undefined
. Ο τύπος symbol
είναι ο λιγότερο διαισθητικός primitive τύπος. Ο σκοπός του είναι να παρέχει ένα μοναδικό όνομα χαρακτηριστικού εντός ενός αντικειμένου όταν δεν υπάρχει ανάγκη να οριστεί ένα συγκεκριμένο όνομα χαρακτηριστικού. Το αντικείμενο είναι μία από τις δομές δεδομένων που θα εξετάσουμε στη συνέχεια.
Δομημένοι Τύποι
Ενώ οι primitive τύποι επαρκούν για τη σύνταξη απλών routines, υπάρχουν μειονεκτήματα στη χρήση τους αποκλειστικά σε πιο σύνθετες εφαρμογές. Μια εφαρμογή ηλεκτρονικού εμπορίου, για παράδειγμα, θα ήταν πολύ πιο δύσκολο να γραφτεί, επειδή ο προγραμματιστής θα έπρεπε να βρει τρόπους αποθήκευσης λιστών στοιχείων και αντίστοιχων τιμών χρησιμοποιώντας μόνο μεταβλητές με primitive τύπους.
Οι δομημένοι τύποι απλοποιούν το έργο της ομαδοποίησης πληροφοριών ίδιας φύσης σε μια ενιαία μεταβλητή. Μια λίστα ειδών σε ένα καλάθι αγορών, για παράδειγμα, μπορεί να αποθηκευτεί σε μια μεμονωμένη μεταβλητή τύπου array:
let cart = ['Milk', 'Bread', 'Eggs'];
Όπως αποδεικνύεται στο παράδειγμα, μια σειρά στοιχείων χαρακτηρίζεται με αγκύλες. Το παράδειγμα έχει συμπληρώσει το array με τρεις κυριολεκτικές τιμές string, εξ ου και η χρήση μονών εισαγωγικών. Οι μεταβλητές μπορούν επίσης να χρησιμοποιηθούν ως στοιχεία σε ένα array, αλλά σε αυτήν την περίπτωση πρέπει να ορίζονται χωρίς εισαγωγικά. Ο αριθμός των στοιχείων σε ένα array μπορεί να ερωτηθεί με την ιδιότητα length
:
let cart = ['Milk', 'Bread', 'Eggs'];
console.log(cart.length);
Ο αριθμός 3
θα εμφανιστεί στο output της κονσόλας. Μπορούν να προστεθούν νέα στοιχεία στον πίνακα με τη μέθοδο push()
:
cart.push('Candy');
console.log(cart.length);
Αυτή τη φορά, το ποσό που εμφανίζεται θα είναι 4
. Κάθε στοιχείο στη λίστα είναι προσβάσιμο από τον αριθμητικό του δείκτη [index], ξεκινώντας με 0
:
console.log(cart[0]);
console.log(cart[3]);
Το output που θα εμφανιστεί στην κονσόλα θα είναι:
Milk Candy
Όπως μπορείτε να χρησιμοποιήσετε το push()
για να προσθέσετε ένα στοιχείο, μπορείτε να χρησιμοποιήσετε το pop()
για να αφαιρέσετε το τελευταίο στοιχείο από ένα array.
Οι τιμές που είναι αποθηκευμένες σε ένα array δεν χρειάζεται να είναι του ίδιου τύπου. Είναι δυνατόν, για παράδειγμα, να αποθηκεύσετε την ποσότητα κάθε είδους δίπλα του. Μια λίστα αγορών όπως αυτή στο προηγούμενο παράδειγμα θα μπορούσε να κατασκευαστεί ως εξής:
let cart = ['Milk', 1, 'Bread', 4, 'Eggs', 12, 'Candy', 2];
// Item indexes are even
let item = 2;
// Quantities indexes are odd
let quantity = 3;
console.log("Item: " + cart[item]);
console.log("Quantity: " + cart[quantity]);
Το output που θα εμφανιστεί στην κονσόλα μετά την εκτέλεση αυτού του κώδικα είναι:
Item: Bread Quantity: 4
Όπως ίσως ήδη έχετε παρατηρήσει, ο συνδυασμός των ονομάτων των αντικειμένων με τις αντίστοιχες ποσότητες τους σε ένα μόνο array μπορεί να μην είναι καλή ιδέα, επειδή η σχέση μεταξύ τους δεν είναι σαφής στη δομή δεδομένων και είναι πολύ επιρρεπής σε (ανθρώπινα) σφάλματα. Ακόμα κι αν ένα array χρησιμοποιήθηκε για ονόματα και ένας άλλο array για τις ποσότητες, η διατήρηση της ακεραιότητας της λίστας θα απαιτούσε την ίδια προσοχή και δεν θα ήταν πολύ παραγωγική. Σε αυτές τις περιπτώσεις, η καλύτερη εναλλακτική είναι να χρησιμοποιήσετε μια πιο κατάλληλη δομή δεδομένων: ένα object.
Στη JavaScript, μια δομή δεδομένων τύπου object σάς επιτρέπει να συνδέετε ιδιότητες σε μια μεταβλητή. Επίσης, σε αντίθεση με ένα array, τα στοιχεία που απαρτίζουν ένα object δεν έχουν σταθερή σειρά. Ένα στοιχείο λίστας αγορών, για παράδειγμα, μπορεί να είναι ένα object με τις ιδιότητες name
και quantity
:
let item = { name: 'Milk', quantity: 1 };
console.log("Item: " + item.name);
console.log("Quantity: " + item.quantity);
Αυτό το παράδειγμα δείχνει ότι ένα object μπορεί να οριστεί χρησιμοποιώντας άγκιστρα ({}
), όπου κάθε ζεύγος ιδιοτήτων/τιμών διαχωρίζεται με άνω και κάτω τελεία και οι ιδιότητες διαχωρίζονται με κόμμα. Η ιδιότητα είναι προσβάσιμη με τη μορφή variable.property, όπως στο item.name
, τόσο για ανάγνωση όσο και για εκχώρηση νέων τιμών. Το output που θα εμφανιστεί στην κονσόλα μετά την εκτέλεση αυτού του κώδικα είναι:
Item: Milk Quantity: 1
Τέλος, κάθε object που αντιπροσωπεύει ένα αντικείμενο μπορεί να συμπεριληφθεί στο array της λίστας αγορών. Αυτό μπορεί να γίνει απευθείας κατά τη δημιουργία της λίστας:
let cart = [{ name: 'Milk', quantity: 1 }, { name: 'Bread', quantity: 4 }];
Όπως και πριν, ένα νέο object που αντιπροσωπεύει ένα στοιχείο μπορεί να προστεθεί αργότερα στον πίνακα:
cart.push({ name: 'Eggs', quantity: 12 });
Τα στοιχεία της λίστας είναι πλέον προσβάσιμα από τον δείκτη τους και το όνομα της ιδιότητάς τους:
console.log("Third item: " + cart[2].name);
console.log(cart[2].name + " quantity: " + cart[2].quantity);
Το output που θα εμφανιστεί στην κονσόλα μετά την εκτέλεση αυτού του κώδικα είναι:
third item: eggs Eggs quantity: 12
Οι δομές δεδομένων επιτρέπουν στον προγραμματιστή να διατηρεί τον κώδικά του πολύ πιο οργανωμένο και πιο εύκολο στη συντήρηση, είτε από τον αρχικό δημιουργό του προγράμματος είτε από άλλους προγραμματιστές της ομάδας. Επίσης, πολλά output από JavaScript functions είναι σε δομημένους τύπους, τους οποίους πρέπει να χειριστεί σωστά ο προγραμματιστής.
Τελεστές
Μέχρι τώρα, έχουμε δει λίγο πολύ, μόνο τον τρόπο εκχώρησης τιμών σε νέες μεταβλητές. Όσο απλό και αν είναι, οποιοδήποτε πρόγραμμα θα εκτελέσει αρκετούς άλλους χειρισμούς στις τιμές των μεταβλητών. Η JavaScript προσφέρει διάφορους τύπους απο operators [τελεστές] που μπορούν να δράσουν απευθείας στην τιμή μιας μεταβλητής ή να αποθηκεύσουν το αποτέλεσμα της πράξης σε μια νέα μεταβλητή.
Οι περισσότεροι τελεστές είναι προσανατολισμένοι προς αριθμητικές πράξεις. Για να αυξήσετε την ποσότητα ενός προϊόντος στη λίστα αγορών, για παράδειγμα, απλώς χρησιμοποιήστε τον τελεστή της πρόσθεσης +
:
item.quantity = item.quantity + 1;
Το παρακάτω απόσπασμα εκτυπώνει την τιμή του item.quantity
πριν και μετά την πρόσθεση. Μην μπερδεύετε τους ρόλους του συμβόλου συν στο απόσπασμα. Τα console.log
statements χρησιμοποιούν ένα σύμβολο συν για να συνδυάσουν δύο strings.
let item = { name: 'Milk', quantity: 1 };
console.log("Item: " + item.name);
console.log("Quantity: " + item.quantity);
item.quantity = item.quantity + 1;
console.log("New quantity: " + item.quantity);
Το output που θα εμφανιστεί στην κονσόλα μετά την εκτέλεση αυτού του κώδικα είναι:
Item: Milk Quantity: 1 New quantity: 2
Σημειώστε ότι η τιμή που είχε αποθηκευτεί προηγουμένως στο item.quantity
χρησιμοποιείται ως ο όρος της πράξης της πρόσθεσης: item.quantity = item.quantity + 1
. Μόνο μετά την ολοκλήρωση της πράξης, η τιμή στο item.quantity
ενημερώνεται με το αποτέλεσμα της πράξης. Αυτό το είδος αριθμητικής πράξης που περιλαμβάνει την τρέχουσα τιμή της μεταβλητής στόχου είναι αρκετά συνηθισμένο, επομένως υπάρχουν τελεστές σε συντομογραφία που σας επιτρέπουν να γράψετε την ίδια πράξη σε συντμημένη μορφή:
item.quantity += 1;
Οι άλλες βασικές πράξεις έχουν επίσης αντίστοιχους τελεστές σε συντομογραφία:
-
a = a - b
είναι ισοδύναμο μεa -= b
. -
a = a * b
είναι ισοδύναμο μεa *= b
. -
a = a / b
είναι ισοδύναμο μεa /= b
.
Για την πρόσθεση και την αφαίρεση, υπάρχει μια τρίτη μορφή διαθέσιμη όταν ο δεύτερος όρος της πράξης είναι μόνο μία μονάδα:
-
a = a + 1
είναι ισοδύναμο μεa++
. -
a = a - 1
είναι ισοδύναμο μεa--
.
Μπορούν να συνδυαστούν περισσότεροι από ένας τελεστές στην ίδια πράξη και το αποτέλεσμα μπορεί να αποθηκευτεί σε μια νέα μεταβλητή. Για παράδειγμα, το ακόλουθο statement υπολογίζει τη συνολική τιμή ενός αντικειμένου συν ένα κόστος αποστολής:
let total = item.quantity * 9.99 + 3.15;
Η σειρά με την οποία εκτελούνται οι πράξεις ακολουθεί την παραδοσιακή σειρά προτεραιότητας: πρώτα εκτελούνται οι πράξεις του πολλαπλασιασμού και της διαίρεσης και μόνο τότε εκτελούνται οι πράξεις της πρόσθεσης και της αφαίρεσης. Οι τελεστές με την ίδια προτεραιότητα εκτελούνται με τη σειρά που εμφανίζονται στην έκφραση, από αριστερά προς τα δεξιά. Για να παρακάμψετε την προεπιλεγμένη σειρά προτεραιότητας, μπορείτε να χρησιμοποιήσετε παρενθέσεις, όπως στο a * (b + c)
.
Σε ορισμένες περιπτώσεις, το αποτέλεσμα μιας πράξης δεν χρειάζεται καν να αποθηκευτεί σε μια μεταβλητή. Αυτή είναι η περίπτωση όταν θέλετε να αξιολογήσετε το αποτέλεσμα μιας έκφρασης μέσα σε μια πρόταση if
:
if ( item.quantiy % 2 == 0 )
{
console.log("Quantity for the item is even");
}
else
{
console.log("Quantity for the item is odd");
}
Ο τελεστής %
(modulo) επιστρέφει το υπόλοιπο της διαίρεσης του πρώτου όρου με τον δεύτερο όρο. Στο παράδειγμα, το statement if
ελέγχει εάν το υπόλοιπο της διαίρεσης του item.quantity
με το 2
είναι ίσο με μηδέν, δηλαδή εάν το item.quantity
είναι πολλαπλάσιο του 2.
Όταν ένας από τους όρους του τελεστή +
είναι ένα string, οι άλλοι όροι εξαναγκάζονται σε strings και το αποτέλεσμα είναι μια συνένωση strings. Στα προηγούμενα παραδείγματα, αυτός ο τύπος λειτουργίας χρησιμοποιήθηκε για τη σύνδεση strings και μεταβλητών στο argument του console.log
statement.
Αυτή η αυτόματη μετατροπή ενδέχεται να μην είναι η επιθυμητή συμπεριφορά. Μια τιμή που παρέχεται από το χρήστη σε ένα πεδίο φόρμας, για παράδειγμα, μπορεί να αναγνωριστεί ως string, αλλά στην πραγματικότητα είναι μια αριθμητική τιμή. Σε περιπτώσεις όπως αυτή, η μεταβλητή πρέπει πρώτα να μετατραπεί σε αριθμό με τo function Number()
:
sum = Number(value1) + value2;
Επιπλέον, είναι σημαντικό να επαληθεύσετε ότι ο χρήστης έχει παράσχει μια έγκυρη τιμή πριν προχωρήσετε στη πράξη. Στη JavaScript, μια μεταβλητή χωρίς εκχωρημένη τιμή περιέχει την τιμή null
. Αυτό επιτρέπει στον προγραμματιστή να χρησιμοποιήσει ένα statement απόφασης όπως if ( value1 == null )
για να ελέγξει το εάν σε μια μεταβλητή έχει εκχωρηθεί μια τιμή, ανεξάρτητα από τον τύπο της τιμής που έχει εκχωρηθεί στη μεταβλητή.
Καθοδηγούμενες Ασκήσεις
-
Ένα array είναι μια δομή δεδομένων που υπάρχει σε πολλές γλώσσες προγραμματισμού, μερικές από τις οποίες επιτρέπουν μόνο arrays με στοιχεία του ίδιου τύπου. Στην περίπτωση της JavaScript, είναι δυνατόν να οριστεί ένα array με στοιχεία διαφορετικών τύπων;
-
Με βάση το παράδειγμα
let item = { name: 'Milk', quantity: 1 }
για ένα object σε μια λίστα αγορών, πώς θα μπορούσε αυτό το object να δηλωθεί ότι περιλαμβάνει την τιμή του προϊόντος; -
Σε μία μόνο γραμμή κώδικα, ποιοι είναι οι τρόποι ενημέρωσης της τιμής μιας μεταβλητής στο μισό της τρέχουσας τιμής της;
Ασκήσεις Εξερεύνησης
-
Στον παρακάτω κώδικα, ποια τιμή θα εμφανιστεί στο output της κονσόλας;
var value = "Global"; { value = "Location"; } console.log(value);
-
Τι θα συμβεί όταν ένας ή περισσότεροι από τους όρους που εμπλέκονται σε μια πράξη πολλαπλασιασμού είναι ένα string;
-
Πώς είναι δυνατόν να αφαιρέσετε το στοιχείο
Eggs
από το arraycart
που δηλώνεται μεlet cart = ['Milk', 'Bread', 'Eggs']
;
Σύνοψη
Αυτό το μάθημα καλύπτει τη βασική χρήση σταθερών και μεταβλητών στη JavaScript. Η JavaScript είναι μια γλώσσα δυναμικής πληκτρολόγησης, επομένως ο προγραμματιστής δεν χρειάζεται να καθορίσει τον τύπο της μεταβλητής πριν την ορίσει. Ωστόσο, είναι σημαντικό να γνωρίζετε τους primitive τύπους της γλώσσας για να διασφαλίσετε το σωστό αποτέλεσμα βασικών λειτουργιών. Επιπλέον, δομές δεδομένων όπως arrays και objects συνδυάζουν primitive τύπους και επιτρέπουν στον προγραμματιστή να δημιουργήσει πιο πολύπλοκες, σύνθετες μεταβλητές. Αυτό το μάθημα περιλαμβάνει τις ακόλουθες έννοιες και διαδικασίες:
-
Κατανόηση σταθερών και μεταβλητών
-
Scope μεταβλητής
-
Δήλωση μεταβλητών με
var
καιlet
-
Primitive τύποι
-
Αριθμητικοί τελεστές
-
Arrays και objects
-
Εξαναγκασμός τύπου και μετατροπή
Απαντήσεις στις Καθοδηγούμενες Ασκήσεις
-
Ένα array είναι μια δομή δεδομένων που υπάρχει σε πολλές γλώσσες προγραμματισμού, μερικές από τις οποίες επιτρέπουν μόνο arrays με στοιχεία του ίδιου τύπου. Στην περίπτωση της JavaScript, είναι δυνατόν να οριστεί ένα array με στοιχεία διαφορετικών τύπων;
Ναι, στη JavaScript είναι δυνατό να οριστούν arrays με στοιχεία διαφορετικών primitive τύπων, όπως strings και αριθμοί.
-
Με βάση το παράδειγμα
let item = { name: 'Milk', quantity: 1 }
για ένα object σε μια λίστα αγορών, πώς θα μπορούσε αυτό το object να δηλωθεί ότι περιλαμβάνει την τιμή του προϊόντος;let item = { name: 'Milk', quantity: 1, price: 4.99 };
-
Σε μία μόνο γραμμή κώδικα, ποιοι είναι οι τρόποι ενημέρωσης της τιμής μιας μεταβλητής στο μισό της τρέχουσας τιμής της;
Κάποιος θα μπορούσε να χρησιμοποιήσει την ίδια τη μεταβλητή ως όρο,
value = value / 2
ή τον συντομογραφικό τελεστή/=
:value /= 2
.
Απαντήσεις στις Ασκήσεις Εξερεύνησης
-
Στον παρακάτω κώδικα, ποια τιμή θα εμφανιστεί στο output της κονσόλας;
var value = "Global"; { value = "Location"; } console.log(value);
Location
-
Τι θα συμβεί όταν ένας ή περισσότεροι από τους όρους που εμπλέκονται σε μια πράξη πολλαπλασιασμού είναι ένα string;
Η JavaScript θα εκχωρήσει την τιμή
NaN
(Not a Number) στο αποτέλεσμα, υποδεικνύοντας ότι η πράξη δεν είναι έγκυρη. -
Πώς είναι δυνατόν να αφαιρέσετε το στοιχείο
Eggs
από το arraycart
που δηλώνεται μεlet cart = ['Milk', 'Bread', 'Eggs']
;Τα arrays στη JavaScript έχουν τη μέθοδο
pop()
, η οποία αφαιρεί το τελευταίο στοιχείο στη λίστα:cart.pop()
.