Why is null an object and what's the difference between null and undefined?

后端 未结 22 1064
猫巷女王i
猫巷女王i 2020-11-22 02:58

Why is null considered an object in JavaScript?

Is checking

if ( object == null )
      Do something

the

22条回答
  •  北荒
    北荒 (楼主)
    2020-11-22 03:37

    One way to make sense of null and undefined is to understand where each occurs.

    Expect a null return value in the following situations:

    • Methods that query the DOM

      console.log(window.document.getElementById("nonExistentElement"));
      //Prints: null
      
    • JSON responses received from an Ajax request

    
        {
          name: "Bob",
          address: null
        }
    
    • RegEx.exec.

    • New functionality that is in a state of flux. The following returns null:

    
            var proto = Object.getPrototypeOf(Object.getPrototypeOf({}));
    
           // But this returns undefined:
    
            Object.getOwnPropertyDescriptor({}, "a");
    

    All other cases of non-existence are denoted by undefined (as noted by @Axel). Each of the following prints "undefined":

        var uninitalised;
        console.log(uninitalised);
    
        var obj = {};
        console.log(obj.nonExistent);
    
        function missingParam(missing){
            console.log(missing);
        }
    
        missingParam();
    
        var arr = [];
        console.log(arr.pop());        
    

    Of course if you decide to write var unitialised = null; or return null from a method yourself then you have null occurring in other situations. But that should be pretty obvious.

    A third case is when you want to access a variable but you don't even know if it has been declared. For that case use typeof to avoid a reference error:

    if(typeof unknown !== "undefined"){
        //use unknown
    }
    

    In summary check for null when you are manipulating the DOM, dealing with Ajax, or using certain ECMAScript 5 features. For all other cases it is safe to check for undefined with strict equality:

    if(value === undefined){
      // stuff
    }
    

提交回复
热议问题