Sobes.tech
Junior

Ποια είναι η διαφορά μεταξύ των διαφορετικών τύπων δεδομένων;

sobes.tech AI

Απάντηση από AI

Στα JavaScript, τα δεδομένα χωρίζονται σε πρωταρχικούς τύπους και αντικείμενα.

Πρωταρχικοί τύποι:

  • String: Συνεχόμενη σειρά χαρακτήρων. Αμετάβλητος.
  • Number: Αριθμοί, συμπεριλαμβανομένων ακέραιων και κινητής υποδιαστολής, καθώς και Infinity, -Infinity και NaN.
  • Boolean: Λογική τιμή (true ή false).
  • Null: Ειδική τιμή που αντιπροσωπεύει την απουσία αντικειμένου.
  • Undefined: Τιμή μιας μεταβλητής στην οποία δεν έχει ανατεθεί τιμή.
  • Symbol: Μοναδικός και αμετάβλητος πρωταρχικός τύπος, χρησιμοποιείται για την ταυτοποίηση ιδιοτήτων αντικειμένων.
  • BigInt: Ακέραιοι αριθμοί οποιασδήποτε μήκους.

Αντικείμενα:

  • Object: Συλλογή ζευγών κλειδιού-τιμής. Μεταβλητό. Παραδείγματα: πίνακες, συναρτήσεις, κανονικές εκφράσεις, ημερομηνίες.

Βασικές διαφορές:

  1. Μεταβλητότητα (Mutability): Οι πρωταρχικοί τύποι είναι αμετάβλητοι, δηλαδή η τιμή τους δεν μπορεί να αλλάξει άμεσα. Προσπάθεια αλλαγής δημιουργεί ένα νέο αντίγραφο. Τα αντικείμενα είναι μεταβλητά, οι ιδιότητές τους μπορούν να προστεθούν, να διαγραφούν και να τροποποιηθούν.
  2. Μεταβίβαση με τιμή / με αναφορά: Οι πρωταρχικοί τύποι περνούν με τιμή (αντιγράφεται η ίδια η τιμή). Τα αντικείμενα περνούν με αναφορά (αντιγράφεται η αναφορά στον χώρο μνήμης όπου αποθηκεύεται το αντικείμενο).
  3. Σύγκριση: Οι πρωταρχικοί τύποι συγκρίνονται με βάση την τιμή. Τα αντικείμενα συγκρίνονται με βάση την αναφορά (δύο μεταβλητές αναφέρονται στο ίδιο αντικείμενο στη μνήμη).
// Παραδείγματα
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 Αντικείμενο (συμπεριλαμβανομένων πινάκων, συναρτήσεων κ.λπ.)