Σε αυτό το σεμινάριο, θα μάθετε για το Σύμβολο JavaScript με τη βοήθεια παραδειγμάτων.
Σύμβολο JavaScript
Το JavaScript ES6 εισήγαγε έναν νέο πρωτόγονο τύπο δεδομένων που ονομάζεται Symbol
. Τα σύμβολα είναι αμετάβλητα (δεν μπορούν να αλλάξουν) και είναι μοναδικά. Για παράδειγμα,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Αν και η τιμή 1 και η τιμή 2 περιέχουν την ίδια περιγραφή, είναι διαφορετικές.
Δημιουργία συμβόλου
Χρησιμοποιείτε τη Symbol()
συνάρτηση για να δημιουργήσετε ένα Symbol
. Για παράδειγμα,
// creating symbol const x = Symbol() typeof x; // symbol
Μπορείτε να περάσετε μια προαιρετική συμβολοσειρά ως περιγραφή της. Για παράδειγμα,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Περιγραφή συμβόλου πρόσβασης
Για πρόσβαση στην περιγραφή ενός συμβόλου, χρησιμοποιούμε τον .
τελεστή. Για παράδειγμα,
const x = Symbol('hey'); console.log(x.description); // hey
Προσθέστε το σύμβολο ως κλειδί αντικειμένου
Μπορείτε να προσθέσετε σύμβολα ως κλειδί σε ένα αντικείμενο χρησιμοποιώντας αγκύλες ()
. Για παράδειγμα,
let id = Symbol("id"); let person = ( name: "Jack", // adding symbol as a key (id): 123 // not "id": 123 ); console.log(person); // (name: "Jack", Symbol(id): 123)
Τα σύμβολα δεν περιλαμβάνονται στο… στο Loop
Ο for… in
βρόχος δεν επαναλαμβάνει τις συμβολικές ιδιότητες. Για παράδειγμα,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Παραγωγή
όνομα ηλικία
Οφέλη από τη χρήση συμβόλων στο αντικείμενο
Εάν το ίδιο απόσπασμα κώδικα χρησιμοποιείται σε διάφορα προγράμματα, τότε είναι καλύτερο να το χρησιμοποιήσετε Symbols
στο αντικείμενο. Επειδή μπορείτε να χρησιμοποιήσετε το ίδιο όνομα κλειδιού σε διαφορετικούς κωδικούς και να αποφύγετε προβλήματα αναπαραγωγής. Για παράδειγμα,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
Στο παραπάνω πρόγραμμα, εάν το person
αντικείμενο χρησιμοποιείται και από άλλο πρόγραμμα, τότε δεν θα θέλατε να προσθέσετε μια ιδιότητα στην οποία μπορείτε να έχετε πρόσβαση ή να αλλάξετε από άλλο πρόγραμμα. Ως εκ τούτου, χρησιμοποιώντας Symbol
, δημιουργείτε μια μοναδική ιδιότητα που μπορείτε να χρησιμοποιήσετε.
Τώρα, εάν το άλλο πρόγραμμα πρέπει επίσης να χρησιμοποιήσει μια ιδιότητα με όνομα id , απλώς προσθέστε ένα σύμβολο με το όνομα id
και δεν θα υπάρξουν προβλήματα αναπαραγωγής. Για παράδειγμα,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
Στο παραπάνω πρόγραμμα, ακόμη και αν χρησιμοποιείται το ίδιο όνομα για την αποθήκευση τιμών, ο Symbol
τύπος δεδομένων θα έχει μια μοναδική τιμή.
Στο παραπάνω πρόγραμμα, εάν χρησιμοποιήθηκε το πλήκτρο συμβολοσειράς, τότε το μεταγενέστερο πρόγραμμα θα άλλαζε την τιμή της ιδιότητας. Για παράδειγμα,
let person = ( name: "Jack" ); // using string as key person.id = 12; console.log(person.id); // 12 // Another program overwrites value person.id = 'Another value'; console.log(person.id); // Another value
Στο παραπάνω πρόγραμμα, το δεύτερο user.id
αντικαθιστά την προηγούμενη τιμή.
Μέθοδοι συμβόλων
Υπάρχουν διάφορες διαθέσιμες μέθοδοι με το Symbol.
Μέθοδος | Περιγραφή |
---|---|
for() | Αναζητά υπάρχοντα σύμβολα |
keyFor() | Επιστρέφει ένα κοινόχρηστο κλειδί συμβόλου από το καθολικό μητρώο συμβόλων. |
toSource() | Επιστρέφει μια συμβολοσειρά που περιέχει την πηγή του αντικειμένου Symbol |
toString() | Επιστρέφει μια συμβολοσειρά που περιέχει την περιγραφή του συμβόλου |
valueOf() | Επιστρέφει την αρχική τιμή του αντικειμένου Symbol. |
Παράδειγμα: Μέθοδοι συμβόλων
// get symbol by name let sym = Symbol.for('hello'); let sym1 = Symbol.for('id'); // get name by symbol console.log( Symbol.keyFor(sym) ); // hello console.log( Symbol.keyFor(sym1) ); // id
Ιδιότητες συμβόλου
Ιδιότητες | Περιγραφή |
---|---|
asyncIterator | Επιστρέφει τον προεπιλεγμένο AsyncIterator για ένα αντικείμενο |
hasInstance | Καθορίζει εάν ένα αντικείμενο κατασκευαστή αναγνωρίζει ένα αντικείμενο ως παρουσία του |
isConcatSpreadable | Υποδεικνύει εάν ένα αντικείμενο πρέπει να ισοπεδωθεί στα στοιχεία του πίνακα |
iterator | Επιστρέφει τον προεπιλεγμένο επαναληπτικό για ένα αντικείμενο |
match | Ταιριάζει με μια συμβολοσειρά |
matchAll | Επιστρέφει έναν επαναληπτικό που αποδίδει αγώνες της κανονικής έκφρασης σε μια συμβολοσειρά |
replace | Αντικαθιστά ταιριαστά υποστρώματα μιας συμβολοσειράς |
search | Επιστρέφει το ευρετήριο μέσα σε μια συμβολοσειρά που ταιριάζει με την κανονική έκφραση |
split | Διαχωρίζει μια συμβολοσειρά στους δείκτες που ταιριάζουν με μια κανονική έκφραση |
species | Δημιουργεί παράγωγα αντικείμενα |
toPrimitive | Μετατρέπει ένα αντικείμενο σε πρωτόγονη τιμή |
toStringTag | Δίνει την προεπιλεγμένη περιγραφή ενός αντικειμένου |
description | Επιστρέφει μια συμβολοσειρά που περιέχει την περιγραφή του συμβόλου |
Παράδειγμα: Παράδειγμα ιδιοτήτων συμβόλων
const x = Symbol('hey'); // description property console.log(x.description); // hey const stringArray = ('a', 'b', 'c'); const numberArray = (1, 2, 3); // isConcatSpreadable property numberArray(Symbol.isConcatSpreadable) = false; let result = stringArray.concat(numberArray); console.log(result); // ("a", "b", "c", (1, 2, 3))