Skip to main content

Μεταβλητές

Οι μεταβλητές είναι οι βασικές μονάδες αποθήκευσης πληροφορίας σε ένα πρόγραμμα. Μια μεταβλητή είναι ένα όνομα (label) που αναφέρεται σε μια τιμή.

Δήλωση Μεταβλητών

Στην JavaScript, οι μεταβλητές δηλώνονται με το λεκτικό var.

Μπορούμε να δηλώσουμε μια μεταβλητή χωρίς να της αναθέσουμε τιμή, αλλά έτσι η τιμή της μεταβλητής θα είναι undefined.

var x;                  // Δήλωση μεταβλητής
console.log(x); // undefined

Ανάθεση Τιμής

Μια μεταβλητή μπορεί να περιέχει οποιαδήποτε τιμή, όπως αριθμούς (number), αλφαριθμητικά (string), boolean, κλπ.

var x = 5;              // Ταυτόχρονη δήλωση και ανάθεση αριθμητικής τιμής
var y = "Hello"; // Αλφαριθμητική τιμή
var z = true; // Boolean τιμή

console.log(x); // 5
console.log(y); // "Hello"
console.log(z); // true

Ονομασία Μεταβλητών

Οι μεταβλητές μπορούν να έχουν οποιοδήποτε όνομα, αλλά πρέπει να πληρούν τις παρακάτω προϋποθέσεις:

  • Να περιέχουν μόνο γράμματα, αριθμούς, κάτω παύλες (_) και $
  • Να μην ξεκινούν με αριθμό

Παραδείγματα έγκυρων ονομάτων μεταβλητών:

  • name
  • age
  • first_name
  • last_name
  • _name
Προσοχή

Οι μεταβλητές στην JavaScript είναι case-sensitive, δηλαδή το name είναι διαφορετικό από το Name.

Δεσμευμένες Λέξεις

Υπάρχουν ορισμένες δεσμευμένες λέξεις (reserved words) δεν μπορούν να χρησιμοποιηθούν ως ονόματα μεταβλητών. Οι δεσμευμένες λέξεις είναι λέξεις που έχουν ειδική σημασία στην JavaScript και χρησιμοποιούνται για την εκτέλεση συγκεκριμένων λειτουργιών.

Παραδείγματα δεσμευμένων λέξεων:

  • break
  • case
  • catch
  • class
  • const
  • continue

Εμβέλεια

Η εμβέλεια μιας μεταβλητής αναφέρεται στο πόσο μακριά από το σημείο δήλωσης της μπορεί να χρησιμοποιηθεί. Οι μεταβλητές μπορεί να έχουν είτε τοπική (local) εμβέλεια, είτε καθολική (global) εμβέλεια.

var

Οι μεταβλητές που δηλώνονται με το με το λεκτικό var έχουν είτε global εμβέλεια, είτε εμβέλεια στα πλαίσια μιας συνάρτησης, ανάλογα με το σημείο δήλωσης τους.

var x = 5;              // Global μεταβλητή

function myFunction() {
var y = 10; // Local μεταβλητή
console.log(x); // 5
console.log(y); // 10
}

console.log(x); // 5
console.log(y); // ReferenceError: y is not defined
Σημείωση

Αν μια μεταβλητή var δηλώνεται μέσα σε ένα code block (π.χ. μέσα σε ένα if statement), τότε η εμβέλεια της μεταβλητής δεν περιορίζεται στο block αυτό, η εμβέλεια της είναι η συνάρτηση στην οποία ανήκει το code block. Αν το code block δεν ανήκει σε κάποια συνάρτηση, τότε η μεταβλητή έχει global εμβέλεια.

Για παραδείγμα:

if (true) {
var x = 5; // Η x έχει global εμβέλεια
}

function myFunction() {
if (true) {
var y = 10; // Η y έχει local εμβέλεια στην myFunction
}
}

console.log(x); // 5
console.log(y); // ReferenceError: y is not defined

let

Το λεκτικό let εισήχθη στην ES6 και χρησιμοποιείται για τη δήλωση μεταβλητών με block scope. Αυτό σημαίνει ότι οι μεταβλητές που δηλώνονται με το λεκτικό let έχουν εμβέλεια μόνο στο block στο οποίο δηλώνονται.

let x = 5;              // Global μεταβλητή

function myFunction() {
let y = 10; // Local μεταβλητή στην myFunction
console.log(x); // 5
console.log(y); // 10

for (let i = 0; i < 5; i++) {
console.log(i); // Local μεταβλητή i μέσα στο for loop
}

console.log(i); // ReferenceError: i is not defined
}

console.log(x); // 5
console.log(y); // ReferenceError: y is not defined

Επίσης μια μεταβλητή που δηλώνεται με το λεκτικό let δεν μπορεί να ξαναδηλωθεί μέσα στο ίδιο block, κάτι το οποίο είναι εφικτό με το λεκτικό var.

let x = 5;
let x = 10; // SyntaxError: Identifier 'x' has already been declared

const

Το λεκτικό const χρησιμοποιείται για τη δήλωση μεταβλητών με block scope, οι οποίες δεν μπορούν να αλλάξουν τιμή μετά την αρχική ανάθεση. Είναι δηλαδή σταθερές.

const x = 5;            // Η x είναι μια αριθμητική σταθερά

x = 10; // TypeError: Assignment to constant variable

Όπως και με το let, μια μεταβλητή που δηλώνεται με το λεκτικό const δεν μπορεί να ξαναδηλωθεί μέσα στο ίδιο block.

const x = 5;
const x = 10; // SyntaxError: Identifier 'x' has already been declared

Μια μεταβλητή που δηλώνεται με το λεκτικό const πρέπει να αρχικοποιηθεί με μια τιμή, αλλιώς θα προκύψει σφάλμα.

const x;                // SyntaxError: Missing initializer in const declaration

Το λεκτικό const είναι λίγο παραπλανητικό. Στην ουσία δεν ορίζει μία σταθερή τιμή, αλλά μια σταθερή αναφορά σε μια τιμή.

Αυτό σημαίνει οτι δεν μπορούμε να:

  • Εκχωρήσουμε ξανά μια constant τιμή
  • Εκχωρήσουμε ξανά ένα constant πίνακα
  • Εκχωρήσουμε ξανά ένα constant αντικειμένο

Αλλά μπορούμε να:

  • Αλλάξουμε τα στοιχεία ενός constant πίνακα
  • Αλλάξουμε τις ιδιότητες ενός constant αντικειμένου
tip

Με την εισαγωγή των let και const στην ES6, η χρήση του var έχει μειωθεί σημαντικά. Συνιστάται να χρησιμοποιούμε let για μεταβλητές που μπορεί να αλλάξουν τιμή και const για σταθερές.