variable === undefined vs. typeof variable === “undefined”

后端 未结 8 1349
情深已故
情深已故 2020-11-22 14:43

The jQuery Core Style Guidelines suggest two different ways to check whether a variable is defined.

  • Global Variables: typeof variable === "undefined&
8条回答
  •  清歌不尽
    2020-11-22 15:27

    Summary:

    When at global scope we actually want to return true if the variable is not declared or has the value undefined:

    var globalVar1;
    
    // This variable is declared, but not defined and thus has the value undefined
    console.log(globalVar1 === undefined);
    
    // This variable is not declared and thus will throw a referenceError
    console.log(globalVar2 === undefined);

    Because in global scope we are not 100% sure if a variable is declared this might give us a referenceError. When we use the typeof operator on the unknown variable we are not getting this issue when the variable is not declared:

    var globalVar1;
    
    console.log(typeof globalVar1 === 'undefined');
    console.log(typeof globalVar2 === 'undefined');

    This is due to the fact that the typeof operator returns the string undefined when a variable is not declared or currently hold the value undefined which is exactly what we want.


    • With local variables we don't have this problem because we know beforehand that this variable will exist. We can simply look in the respective function if the variable is present.
    • With object properties we don't have this problem because when we try to lookup an object property which does not exist we also get the value undefined

    var obj = {};
    
    console.log(obj.myProp === undefined);

提交回复
热议问题