Sobes.tech
Junior

Τι είναι οι μη δηλωμένες (undeclared) μεταβλητές;

sobes.tech AI

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

Οι μη δηλωμένες μεταβλητές στην JavaScript είναι μεταβλητές που δεν έχουν δηλωθεί με τις λέξεις-κλειδιά var, let ή const, αλλά στις οποίες έχει ανατεθεί μια τιμή.

// Ραφή δηλωμένη
let δηλωμένηΜεταβλητή = "Είμαι δηλωμένη";

// Μη ρητή ανάθεση (δημιουργεί μια μη δηλωμένη μεταβλητή σε μη αυστηρή λειτουργία)
// Σε αυστηρή λειτουργία ('use strict') αυτό θα προκαλέσει σφάλμα ReferenceError
μη δηλωμένηΜεταβλητή = "Δεν είμαι δηλωμένη";

Η συμπεριφορά των μη δηλωμένων μεταβλητών εξαρτάται από τη λειτουργία εκτέλεσης του κώδικα:

  • Μη αυστηρή λειτουργία: Η ανάθεση τιμής σε μια μη δηλωμένη μεταβλητή δημιουργεί μια παγκόσμια μεταβλητή με αυτό το όνομα στο Window (για τους περιηγητές). Αυτό θεωρείται κακή πρακτική, καθώς μολύνει το παγκόσμιο χώρο ονομάτων και δυσκολεύει την αποσφαλμάτωση.
  • Αυστηρή λειτουργία ('use strict'): Η ανάθεση τιμής σε μια μη δηλωμένη μεταβλητή προκαλεί σφάλμα ReferenceError. Αυτή η συμπεριφορά προτιμάται, καθώς αποτρέπει την τυχαία δημιουργία παγκόσμιων μεταβλητών και προάγει πιο προβλέψιμο κώδικα.

Ο έλεγχος ύπαρξης μιας μη δηλωμένης μεταβλητής μπορεί να γίνει με typeof. Σε μη αυστηρή λειτουργία, μια μη δηλωμένη μεταβλητή θα έχει τύπο 'undefined', όπως και μια δηλωμένη αλλά μη αρχικοποιημένη μεταβλητή.

let αρχικοποιημένηΑλλάΑόριστη;
// console.log(typeof αρχικοποιημένηΑλλάΑόριστη); // => 'undefined'

// Σε μη αυστηρή λειτουργία
// μη δηλωμένηΜεταβλητή = "Έλεγχος";
// console.log(typeof μη δηλωμένηΜεταβλητή); // => 'undefined'

// Έλεγχος ύπαρξης της μεταβλητής πριν την πρόσβαση
if (typeof πιθανώςΜηΔηλωμένη !== 'undefined') {
    // Κώδικας για εργασία με πιθανώςΜηΔηλωμένη
}

Η χρήση μη δηλωμένων μεταβλητών αποτελεί πηγή πιθανών σφαλμάτων και δυσκολεύει τη συντήρηση του κώδικα. Πάντα συνιστάται να δηλώνετε ρητά τις μεταβλητές με let, const ή var (αν και το var έχει τις δικές του ιδιαιτερότητες και στον σύγχρονο κώδικα προτιμώνται let και const). Η χρήση αυστηρής λειτουργίας ('use strict') αποτελεί τυπική πρακτική για την αποτροπή τέτοιων προβλημάτων.