Η διαφορά μεταξύ μηδενικής και μη καθορισμένης στο JavaScript
Αναφορά
JavaScriptΤυπική χρήση του null
Ως παράμετρος συνάρτησης, σημαίνει ότι η παράμετρος συνάρτησης δεν είναι αντικείμενο
function myFn(obj) {
if(null == obj) {
// code
}
}
Ως το τέλος της πρωτότυπης αλυσίδας του αντικειμένου
Object.getPrototypeOf(Object.prototype);
Κατά την απελευθέρωση της μεταβλητής, αντιστοιχίστε null στη μεταβλητή
let o={
code:'abc'
};
o = null;
Τυπική χρήση του απροσδιόριστου
Η μεταβλητή δηλώνεται αλλά δεν έχει εκχωρηθεί, η τιμή της μεταβλητής δεν είναι καθορισμένη
let o;
console.log(o); //undefined
Η παράμετρος που πρέπει να παρέχει η συνάρτηση δεν παρέχεται κατά την κλήση, τότε η τιμή της παραμέτρου που δεν παρέχεται δεν είναι καθορισμένη
function myFn(o) {
console.log(o);
}
myFn(); //undefined
Ιδιότητες που το αντικείμενο δεν περιέχει, η τιμή είναι απροσδιόριστη
let o={
code:'abc'
};
console.log(o.name); //undefined
Όταν η συνάρτηση δεν επιστρέφει μια τιμή, επιστρέφει προκαθορισμένη από προεπιλογή
function myFn(obj) {
obj = 'a';
}
console.log(myFn()); //undefined
Ομοιότητες μεταξύ μηδενικής και απροσδιόριστης
Λάθος όταν μετατρέπεται σε boolean
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
Η διαφορά μεταξύ μηδενικής και απροσδιόριστης
Το αποτέλεσμα είναι διαφορετικό όταν μετατρέπεται σε αριθμό. Το αποτέλεσμα της μηδενικής μετατροπής είναι μια έγκυρη τιμή αριθμού 0 και το αποτέλεσμα της μη καθορισμένης μετατροπής είναι NaN.
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
Οι δύο τύποι είναι διαφορετικοί, ο τύπος μηδενικού είναι αντικείμενο και ο τύπος μη καθορισμένου είναι αόριστος.
console.log(typeof null); //object
console.log(typeof undefined); //undefined
συγκρίνετε μηδενική και απροσδιόριστη
Για να γίνει διάκριση μεταξύ μηδενικού και απροσδιόριστου, μπορεί να χρησιμοποιηθεί μόνο η συνάφεια. Σε συμφωνία, θα συγκρίνει αυστηρά αν οι δύο τύποι είναι ίσοι.
console.log(Boolean(null == undefined)); // true
console.log(Boolean(null === undefined)); // false
εν κατακλείδι
Μετά την παραπάνω σύγκριση, έχουμε μια σαφή κατανόηση αυτών των δύο τύπων. Συνήθως όταν κρίνουμε εάν μια μεταβλητή έχει έγκυρη τιμή κατά τη σύνταξη κώδικα, δεν χρειάζεται να διακρίνουμε μεταξύ των δύο, απλώς να την χρησιμοποιήσουμε ως Boolean τύπο. Αλλά όταν πρέπει να κρίνουμε εάν το ακίνητο υπάρχει, πρέπει να χρησιμοποιήσουμε αυστηρά τον τύπο για να κρίνουμε αόριστο. Τέλος, αν περάσουμε μια αριθμητική τιμή, πρέπει πρώτα να πάρουμε μια κρίση και δεν μπορούμε να μεταφέρουμε απευθείας σε έναν αριθμητικό τύπο, διαφορετικά το null θα μας κάνει να έχουμε μη φυσιολογικά αποτελέσματα και το απροσδιόριστο θα υπολογίσει άμεσα το μη έγκυρο αποτέλεσμα NaN.