Ποια μέθοδος ελέγχου για το αν μια μεταβλητή έχει αρχικοποιηθεί είναι καλύτερη/σωστή; (Υποθέτοντας ότι η μεταβλητή μπορεί να περιέχει οτιδήποτε (συμβολοσειρά, int, αντικείμενο, συνάρτηση κ.λπ.))
if (elem) { // or !elem
ή
if (typeof(elem) !== 'undefined') {
or
if (elem != null) {
Θέλετε τον τελεστή typeof
. Συγκεκριμένα:
if (typeof variable !== 'undefined') {
// the variable is defined
}
Στην πλειοψηφία των περιπτώσεων θα χρησιμοποιήσετε:
elem != null
Σε αντίθεση με ένα απλό if (elem)
, επιτρέπει τα 0
, false
, NaN
και ''
, αλλά απορρίπτει τα null
ή undefined
, καθιστώντας το ένα καλό, γενικό τεστ για την παρουσία ενός όρου, ή μιας ιδιότητας ενός αντικειμένου.
Οι άλλοι έλεγχοι δεν είναι επίσης λανθασμένοι, απλά έχουν διαφορετικές χρήσεις:
Εάν το elem
είναι εγγυημένα ένα αντικείμενο, ή εάν οι τιμές false
, 0
, κλπ. θεωρούνται "προεπιλεγμένες" (άρα ισοδύναμες με τις τιμές undefined
ή null
).
Το typeof elem == 'undefined'
μπορεί να χρησιμοποιηθεί σε περιπτώσεις όπου ένα καθορισμένο null
έχει διαφορετική σημασία από μια μη αρχικοποιημένη μεταβλητή ή ιδιότητα.
Αυτός είναι ο μόνος έλεγχος που δεν θα πετάξει σφάλμα αν το elem
δεν είναι δηλωμένο (δηλαδή δεν υπάρχει δήλωση var
, δεν είναι ιδιότητα του window
ή δεν είναι όρισμα συνάρτησης). Αυτό είναι, κατά τη γνώμη μου, μάλλον επικίνδυνο, καθώς επιτρέπει σε τυπογραφικά λάθη να περάσουν απαρατήρητα. Για να το αποφύγετε αυτό, δείτε την παρακάτω μέθοδο.
Επίσης, είναι χρήσιμη μια αυστηρή σύγκριση έναντι του undefined
:
if (elem === undefined) ...
Ωστόσο, επειδή η παγκόσμια undefined
μπορεί να αντικατασταθεί με άλλη τιμή, είναι καλύτερο να δηλώσετε τη μεταβλητή undefined
στην τρέχουσα εμβέλεια πριν τη χρησιμοποιήσετε:
var undefined; // really undefined
if (elem === undefined) ...
Ή:
(function (undefined) {
if (elem === undefined) ...
})();
Ένα δευτερεύον πλεονέκτημα αυτής της μεθόδου είναι ότι οι JS minifiers μπορούν να μειώσουν τη μεταβλητή undefined
σε έναν μόνο χαρακτήρα, εξοικονομώντας σας μερικά bytes κάθε φορά.
Εξαρτάται από το αν σας ενδιαφέρει μόνο ότι η μεταβλητή έχει οριστεί ή αν θέλετε να έχει μια ουσιαστική τιμή.
Ο έλεγχος αν ο τύπος είναι undefined θα ελέγξει αν η μεταβλητή έχει οριστεί ακόμα.
Το === null
ή το !== null
θα ελέγξει μόνο αν η τιμή της μεταβλητής είναι ακριβώς null
.
== null
ή != null
θα ελέγξει αν η τιμή είναι undefined
ή null
.
Το if(value)
θα ελέγξει αν η μεταβλητή είναι undefined
, null
, 0
, ή μια κενή συμβολοσειρά.