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