Junior
Τι ελέγχει ο τελεστής instanceof στην JavaScript;
sobes.tech AI
Απάντηση από AI
Ο τελεστής instanceof στην JavaScript ελέγχει αν ένα αντικείμενο είναι μια περίπτωση συγκεκριμένης κλάσης ή κατασκευαστή.
Αρχή λειτουργίας:
- Ο τελεστής
instanceofελέγχει αν τοprototypeτου κατασκευαστή υπάρχει στη αλυσίδα πρωτοτύπων του αντικειμένου. - Αν το
prototypeτου κατασκευαστή βρίσκεται στην αλυσίδα, το αποτέλεσμα είναιtrue. - Διαφορετικά, το αποτέλεσμα είναι
false.
Παραδείγματα:
// Δημιουργία κλάσης
class Animal {
// Κατασκευαστής
constructor(name) {
this.name = name;
}
}
// Δημιουργία στιγμιότυπου της κλάσης
let dog = new Animal("Buddy");
// Έλεγχος αν το dog είναι στιγμιότυπο της Animal
console.log(dog instanceof Animal); // true
// Έλεγχος αν το dog είναι στιγμιότυπο του Object (είναι, μέσω της αλυσίδας πρωτοτύπων)
console.log(dog instanceof Object); // true
// Έλεγχος αν το dog είναι στιγμιότυπο του Array (δεν είναι)
console.log(dog instanceof Array); // false
// Έλεγχος με ενσωματωμένους τύπους
let arr = [1, 2, 3];
console.log(arr instanceof Array); // true
console.log(arr instanceof Object); // true
let num = 123;
console.log(num instanceof Number); // false (για primitives, το `instanceof` συμπεριφέρεται συγκεκριμένα)
// Για primitives που δημιουργούνται με new
let numObj = new Number(123);
console.log(numObj instanceof Number); // true
Χαρακτηριστικά:
- Το
instanceofλειτουργεί μέσω της αλυσίδας πρωτοτύπων, επομένως το αποτέλεσμα μπορεί να είναιtrueκαι για τους γονικούς κατασκευαστές. - Για primitive τύπους (string, number, boolean, null, undefined, symbol, bigint), το
instanceofγενικά επιστρέφειfalseαν δεν έχουν δημιουργηθεί μέσω του αντίστοιχου αντικειμένου-περιτύλιξης (new String(),new Number(), κ.λπ.). - Μπορεί να είναι ανακριβές όταν εργάζεστε με διαφορετικά περιβάλλοντα εκτέλεσης JavaScript (π.χ. διαφορετικά παράθυρα ή iframe), καθώς κάθε περιβάλλον έχει τους δικούς του κατασκευαστές.
Παρόμοιες προσεγγίσεις για έλεγχο τύπου:
typeof: επιστρέφει μια συμβολοσειρά που υποδεικνύει τον βασικό τύπο δεδομένων (string, number, boolean, object, function, undefined, symbol, bigint). Δεν είναι κατάλληλο για έλεγχο αν ένα αντικείμενο ανήκει σε μια συγκεκριμένη κλάση.Object.prototype.toString.call(): επιστρέφει μια πιο ακριβή συμβολοσειρά με τον τύπο του αντικειμένου ("[object Array]","[object Date]", κ.λπ.).
Γενικά, το instanceof είναι χρήσιμο για τον έλεγχο αν ένα αντικείμενο ανήκει σε μια συγκεκριμένη κλάση ή στον προγόνου της στην ιεραρχία κληρονομιάς.