Primitive Types
Η JavaScript έχει κάποιους προκαθορισμένους τύπους δεδομένων, οι οποίοι ονομάζονται Primitive Data Types. Αυτοί οι τύποι είναι οι εξής:
Number
Ο τύπος Number χρησιμοποιείται για αριθμητικές τιμές. Μπορεί να είναι ακέραιος αριθμός ή δεκαδικός αριθμός. Στην JavaScript δεν υπάρχει διαφορά μεταξύ αυτών των δύο τύπων.
const x = 5; // Ακέραιος αριθμός
const y = 5.5; // Δεκαδικός αριθμός
console.log(typeof x); // "number"
console.log(typeof y); // Επίσης "number"
Δύο ειδικές τιμές που μπορούν να αντιστοιχιστούν στον τύπο Number είναι το Infinity και το NaN.
Το Infinity χρησιμοποιείται όταν ένας αριθμός υπερβαίνει το μέγιστο επιτρεπτό όριο.
const x = 1 / 0;
console.log(x); // Infinity
const y = -1 / 0;
console.log(y); // -Infinity
console.log(typeof x); // "number"
console.log(typeof y); // Επίσης "number"
Το NaN (Not-a-Number) χρησιμοποιείται όταν μια αριθμητική πράξη δεν μπορεί να εκτελεστεί (Invalid Number). Καλή πρακτική είναι να ελέγχουμε αν μια τιμή είναι NaN πριν την χρησιμοποιήσουμε.
const x = 100 / "Apple";
console.log(x); // NaN
console.log(typeof(x)); // "number"
Το NaN είναι η μόνη τιμή στην JavaScript που δεν είναι ίση με τον εαυτό της. Αυτό σημαίνει ότι αν χρησιμοποιήσουμε τον τελεστή === για να συγκρίνουμε μια τιμή με το NaN, το αποτέλεσμα θα είναι false. Δηλαδή NaN === NaN επιστρέφει false.
Για να ελέγξουμε αν μια τιμή δεν είναι αριθμός ή δεν μπορεί να μετατραπεί σε αριθμό (περισσότερα στο κεφάλαιο "Αλλαγή Τύπου"), μπορούμε να χρησιμοποιήσουμε την συνάρτηση isNaN().
const x = 100 / "Apple";
isNaN(x); // true
Παρατηρούμε οτι η συνάρτηση isNaN() επιστρέφει false αν η τιμή είναι αριθμός σε μορφή String. Αυτό γίνεται γιατί η συνάρτηση isNaN() προσπαθεί πρώτα να μετατρέψει την τιμή σε αριθμό πριν επιστρέψει κάποιο αποτέλεσμα.
const x = "100";
isNaN(x); // false
Μπορούμε επίσης να χρησιμοποιήσουμε την συνάρτηση Number.isNaN() για να ελέγξουμε αν μια τιμή είναι αμιγώς NaN.
const x = "bar" / "foo";
const y = NaN;
Number.isNaN(x); // true
Number.isNaN(y); // true
String
Ο τύπος String χρησιμοποιείται για αλφαριθμητικές τιμές. Μπορεί να περιέχει οποιοδήποτε κείμενο μέσα σε εισαγωγικά.
const x = "Hello World!";
console.log(typeof x); // "string"
Μπορούμε να χρησιμοποιήσουμε είτε μονά είτε διπλά εισαγωγικά για να δηλώσουμε μια τιμή τύπου String.
const x = 'Hello World!';
const y = "Hello World!";
Αν θέλουμε να χρησιμοποιήσουμε εισαγωγικά μέσα σε μια τιμή τύπου String, μπορούμε να χρησιμοποιήσουμε τον χαρακτήρα \ για να δηλώσουμε ότι το εισαγωγικό δεν είναι το τέλος της τιμής.
const x = "He said \"Hello\"";
console.log(x); // He said "Hello"
Boolean
Ο τύπος Boolean χρησιμοποιείται για τις τιμές true και false.
const x = true;
const y = false;
console.log(typeof x); // "boolean"
console.log(typeof y); // Επίσης "boolean"
undefined
Η τιμή undefined χρησιμοποιείται όταν μια μεταβλητή δεν έχει αρχικοποιηθεί.
var x;
console.log(x); // undefined
console.log(typeof x); // "undefined"
const y = undefined;
console.log(y); // undefined
const arr = [1, 2, 3];
console.log(arr[3]); // undefined
function foo() {
return;
}
console.log(foo()); // undefined
null
Η τιμή null χρησιμοποιείται όταν θέλουμε να δηλώσουμε ότι μια μεταβλητή δεν περιέχει τίποτα ή αναπαριστά μια άγνωστη τιμή.
const x = null;
console.log(x); // null
console.log(typeof x); // "object" (???)
Η τιμή null επιστρέφει "object" όταν χρησιμοποιήσουμε τον operator typeof. Αυτό είναι ένα bug στην JavaScript που υπάρχει απο τις πρώτες κιόλας εκδόσεις της. Αυτό το bug διατηρείται μέχρι και σημερα για λόγους συμβατότητας με παλαιότερες εκδόσεις της γλώσσας.
BigInt
Ο τ ύπος BigInt χρησιμοποιείται για ακέραιους αριθμούς με μεγάλη ακρίβεια. Μπορούμε να δηλώσουμε μια τιμή τέτοιου τύπου προσθέτοντας τον χαρακτήρα n στο τέλος της τιμής.
const x = 237n;
console.log(x); // 237n
console.log(typeof x); // "bigint"
Symbol
Ο τύπος Symbol χρησιμοποιείται για τη δημιουργία μοναδικών τιμών. Ένα Symbol δεν μπορεί να συγκριθεί με άλλες τιμές.
const x = Symbol("Hello");
console.log(x); // Symbol(Hello)
console.log(typeof x); // "symbol"
const y = Symbol("Hello");
console.log(x === y); // false
const z = Symbol("World");
console.log(x === z); // false