Junior
Ποια είναι η διαφορά μεταξύ των διαφορετικών τύπων δεδομένων;
sobes.tech AI
Απάντηση από AI
Στα JavaScript, τα δεδομένα χωρίζονται σε πρωταρχικούς τύπους και αντικείμενα.
Πρωταρχικοί τύποι:
- String: Συνεχόμενη σειρά χαρακτήρων. Αμετάβλητος.
- Number: Αριθμοί, συμπεριλαμβανομένων ακέραιων και κινητής υποδιαστολής, καθώς και
Infinity,-InfinityκαιNaN. - Boolean: Λογική τιμή (
trueήfalse). - Null: Ειδική τιμή που αντιπροσωπεύει την απουσία αντικειμένου.
- Undefined: Τιμή μιας μεταβλητής στην οποία δεν έχει ανατεθεί τιμή.
- Symbol: Μοναδικός και αμετάβλητος πρωταρχικός τύπος, χρησιμοποιείται για την ταυτοποίηση ιδιοτήτων αντικειμένων.
- BigInt: Ακέραιοι αριθμοί οποιασδήποτε μήκους.
Αντικείμενα:
- Object: Συλλογή ζευγών κλειδιού-τιμής. Μεταβλητό. Παραδείγματα: πίνακες, συναρτήσεις, κανονικές εκφράσεις, ημερομηνίες.
Βασικές διαφορές:
- Μεταβλητότητα (Mutability): Οι πρωταρχικοί τύποι είναι αμετάβλητοι, δηλαδή η τιμή τους δεν μπορεί να αλλάξει άμεσα. Προσπάθεια αλλαγής δημιουργεί ένα νέο αντίγραφο. Τα αντικείμενα είναι μεταβλητά, οι ιδιότητές τους μπορούν να προστεθούν, να διαγραφούν και να τροποποιηθούν.
- Μεταβίβαση με τιμή / με αναφορά: Οι πρωταρχικοί τύποι περνούν με τιμή (αντιγράφεται η ίδια η τιμή). Τα αντικείμενα περνούν με αναφορά (αντιγράφεται η αναφορά στον χώρο μνήμης όπου αποθηκεύεται το αντικείμενο).
- Σύγκριση: Οι πρωταρχικοί τύποι συγκρίνονται με βάση την τιμή. Τα αντικείμενα συγκρίνονται με βάση την αναφορά (δύο μεταβλητές αναφέρονται στο ίδιο αντικείμενο στη μνήμη).
// Παραδείγματα
let str1 = "hello";
let str2 = str1; // το str2 λαμβάνει ένα αντίγραφο της τιμής του str1
str1 = "world"; // Δημιουργείται μια νέα συμβολοσειρά "world" για το str1
console.log(str2); // "hello" - το str2 δεν άλλαξε
let obj1 = { name: "Alice" };
let obj2 = obj1; // το obj2 λαμβάνει την αναφορά στο ίδιο αντικείμενο με το obj1
obj1.name = "Bob"; // Η ιδιότητα του αντικειμένου αλλάζει
console.log(obj2.name); // "Bob" - και το obj2 άλλαξε
let num1 = 10;
let num2 = 10;
console.log(num1 === num2); // true - συγκρίνονται οι τιμές
let objA = { value: 1 };
let objB = { value: 1 };
console.log(objA === objB); // false - συγκρίνονται οι αναφορές (διαφορετικά αντικείμενα, ακόμα και αν έχουν το ίδιο περιεχόμενο)
Πίνακας διαφορών:
| Χαρακτηριστικό | Πρωταρχικοί τύποι | Αντικείμενα |
|---|---|---|
| Μεταβλητότητα | Αμετάβλητοι | Μεταβλητά |
| Μεταβίβαση | Με τιμή | Με αναφορά |
| Σύγκριση | Με τιμή | Με αναφορά |
| Αποθήκευση | Άμεσα στη μεταβλητή | Αναφορά στη θέση στη μνήμη |
| Τύποι δεδομένων | String, Number, Boolean, Null, Undefined, Symbol, BigInt | Αντικείμενο (συμπεριλαμβανομένων πινάκων, συναρτήσεων κ.λπ.) |