JavaScript check if variable exists (is defined/initialized)

前端 未结 29 1645
孤城傲影
孤城傲影 2020-11-22 00:59

Which method of checking if a variable has been initialized is better/correct? (Assuming the variable could hold anything (string, int, object, function, etc.))



        
29条回答
  •  野性不改
    2020-11-22 01:43

    You could use a try...catch block like the following:

    var status = 'Variable exists'
    
    try {
      myVar
    } catch (ReferenceError) {
      status = 'Variable does not exist'
    }
    
    console.log(status)

    A disadvantage is you cannot put it in a function as it would throw a ReferenceError

    function variableExists(x) {
      var status = true
      try {
        x
      } catch (ReferenceError) {
        status = false
      }
      
      return status
    }
    
    console.log(variableExists(x))

    Edit:

    If you were working in front-end Javascript and you needed to check if a variable was not initialized (var x = undefined would count as not initialized), you could use:

    function globalVariableExists(variable) {
      if (window[variable] != undefined) {
        return true
      }
      
      return false
    }
    
    var x = undefined
    
    console.log(globalVariableExists("x"))
    
    console.log(globalVariableExists("y"))
    
    var z = 123
    
    console.log(globalVariableExists("z"))

    Edit 2:

    If you needed to check if a variable existed in the current scope, you could simply pass this to the function, along with the name of the variable contained in a string:

    function variableExists(variable, thisObj) {
      if (thisObj[variable] !== undefined) {
        return true
      }
      
      return false
    }
    
    class someClass {
      constructor(name) { 
        this.x = 99
        this.y = 99
        this.z = 99
        this.v = 99
        
        console.log(variableExists(name, this))
      }
    }
    
    new someClass('x')
    new someClass('y')
    new someClass('z')
    new someClass('v')
    new someClass('doesNotExist')

提交回复
热议问题