Το σύμβολο σε Javascript

Γνωρίστε τα σύμβολα: Ο μοναδικός τύπος δεδομένων για τις ιδιότητες αντικειμένων

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

Χρήση συμβόλων σε Javascript

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

Η δημιουργία ενός συμβόλου είναι απλή.

const mySymbol = Symbol();

Μπορείτε επίσης να δημιουργήσετε ένα σύμβολο με περιγραφή.

const mySymbol = Symbol("my description");

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

const sym1 = Symbol("foo");
const sym2 = Symbol("foo");

// false
console.log(sym1 === sym2);

Τι κάνει τα Symbols μοναδικά

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

const obj = {};
obj[mySymbol] = "bar";

// "bar"
console.log(obj[mySymbol]);

Μπορείτε να χρησιμοποιήσετε σύμβολα ως κλειδιά για ιδιότητες αντικειμένων, αλλά δεν μπορείτε να τα χρησιμοποιήσετε ως ονόματα ιδιοτήτων (κλειδιά) στο JSON.

const sym = Symbol("foo");
const obj = { [sym]: "bar" };

// {}
console.log(JSON.stringify(obj));

Τα σύμβολα δεν είναι απαριθμήσιμα, επομένως δεν θα εμφανίζονται όταν χρησιμοποιείτε έναν βρόχο for-in σε ένα αντικείμενο.

const obj = {};
obj[Symbol("a")] = "a";
obj[Symbol("b")] = "b";

for (var key in obj) {
  // undefined
  console.log(key);
}

Μπορείτε να χρησιμοποιήσετε το Object.getOwnPropertySymbols για να λάβετε μια σειρά από όλα τα σύμβολα σε ένα αντικείμενο.

const obj = {};
obj[Symbol("a")] = "a";
obj[Symbol("b")] = "b";

const symbols = Object.getOwnPropertySymbols(obj);

// [Symbol(a), Symbol(b)]
console.log(symbols);

Χρήση συμβόλου ως επαναλήπτη

Μπορείτε να χρησιμοποιήσετε το γνωστό Symbol.iterator για να πάρετε ένα σύμβολο που μπορεί να χρησιμοποιηθεί ως επαναλήπτης.

const arr = [1, 2, 3];
const it = arr[Symbol.iterator]();

// { value: 1, done: false }
console.log(it.next());

// { value: 2, done: false }
console.log(it.next());

// { value: 3, done: false }
console.log(it.next()); 

// { value: undefined, done: true }
console.log(it.next());

Ένα πιο πραγματικό παράδειγμα

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

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

const person = {
  name: "John Doe"
};
const birthYear = Symbol("birth year");
person[birthYear] = "1955";

for (var key in person) {
  // name
  console.log(key); 
}

// 1955
console.log(person[birthYear]);

Προτάσεις

Σχετικά

Προσάρτημα

Γλώσσες