JavaScript checking for null vs. undefined and difference between == and ===

前端 未结 8 835
忘了有多久
忘了有多久 2020-11-22 16:53
  1. How do I check a variable if it\'s null or undefined and what is the difference between the null and undefined?<

8条回答
  •  生来不讨喜
    2020-11-22 17:25

    The difference is subtle.

    In JavaScript an undefined variable is a variable that as never been declared, or never assigned a value. Let's say you declare var a; for instance, then a will be undefined, because it was never assigned any value.

    But if you then assign a = null; then a will now be null. In JavaScript null is an object (try typeof null in a JavaScript console if you don't believe me), which means that null is a value (in fact even undefined is a value).

    Example:

    var a;
    typeof a;     # => "undefined"
    
    a = null;
    typeof null;  # => "object"
    

    This can prove useful in function arguments. You may want to have a default value, but consider null to be acceptable. In which case you may do:

    function doSomething(first, second, optional) {
        if (typeof optional === "undefined") {
            optional = "three";
        }
        // do something
    }
    

    If you omit the optional parameter doSomething(1, 2) thenoptional will be the "three" string but if you pass doSomething(1, 2, null) then optional will be null.

    As for the equal == and strictly equal === comparators, the first one is weakly type, while strictly equal also checks for the type of values. That means that 0 == "0" will return true; while 0 === "0" will return false, because a number is not a string.

    You may use those operators to check between undefined an null. For example:

    null === null            # => true
    undefined === undefined  # => true
    undefined === null       # => false
    undefined == null        # => true
    

    The last case is interesting, because it allows you to check if a variable is either undefined or null and nothing else:

    function test(val) {
        return val == null;
    }
    test(null);       # => true
    test(undefined);  # => true
    

提交回复
热议问题