Η διαφορά μεταξύ μηδενικής και μη καθορισμένης στο 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.