【问题标题】:How can I determine if a JavaScript variable is defined in a page? [duplicate]如何确定页面中是否定义了 JavaScript 变量? [复制]
【发布时间】:2010-09-13 09:53:40
【问题描述】:

如果在页面中定义了变量,我如何检查 JavaScript?假设我想检查一个名为“x”的变量是否在页面中定义,如果我这样做if(x != null),它会给我一个错误。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    我使用 if (typeof(x) != "undefined") 让它工作

    【讨论】:

    • 您正在检查 x 是否为字符串,而不是 x 未定义。
    • 乔纳森,你确定吗? John Resig 在他的 javascript 教程中使用了这种精确的方法:ejohn.org/apps/learn/#11 您可以在页面上运行脚本并亲自查看。
    • 我刚刚在firebug中检查过,未定义确实映射到字符串“未定义”,有人在写JS时严重吸烟,我已纠正。
    • @Ben:字符串"undefined" 更正确——如果使用!==,那么引号是必要的,因为typeof 会产生一个字符串。
    • @BenBederson @BenAlpert,另外,undefined 可以被覆盖!使用字符串。
    【解决方案2】:

    为了避免意外赋值,我养成了颠倒条件表达式顺序的习惯:

    if ('undefined' !== typeof x) {
    

    【讨论】:

    • 嘿,我也倒序了!不记得我在哪里学的...
    • 您想使用!==,而不是===。 :)
    • 我讨厌反向赋值。
    • .sentences English那些完全相反的
    • 这无疑是更好的方法,但它的尴尬困扰着我(而且它经常与其他人的代码不一致)。我希望它是错误的。
    【解决方案3】:

    typeof 运算符与其他运算符不同,在与未声明的符号一起使用时不会引发 ReferenceError 异常,因此使用起来很安全...

    if (typeof a != "undefined") {
        a();
    }
    

    【讨论】:

      【解决方案4】:

      你可以这样做:

      如果 (window.x !== 未定义) { // 你在这里编码 }

      【讨论】:

      • 这仅适用于全局范围内的“变量”,因为它们实际上是“窗口”对象的属性。使用 ''var'' 语句声明的变量将无法以这种方式进行测试。更多信息:ahedg.es/84
      • 另外,这假定全局对象是窗口,这(通常?)在浏览器中是这种情况,但在其他环境中不一定是这样。
      【解决方案5】:

      正如其他人所提到的,typeof 运算符甚至可以评估未声明的标识符而不会引发错误。

      alert (typeof sdgfsdgsd);
      

      将显示“未定义”,其中类似

      alert (sdgfsdgsd);
      

      会抛出一个 ReferenceError。

      【讨论】:

        【解决方案6】:

        假设您的函数或变量是在典型的“全局”(参见:window's)范围内定义的,我更喜欢:

        if (window.a != null) {
           a();
        }
        

        如果您正在检查一个函数的存在,甚至是以下内容:

        if (window.a) a();
        

        【讨论】:

          【解决方案7】:

          尝试使用undefined

          if (x !== undefined)
          

          这是检查特定浏览器功能的方式。

          【讨论】:

          • 你确定确切的语法适用于尼克吗?它对我来说是一个错误,x 是未定义的。
          • 这是如何获得 4 票的?它做的几乎和 OP 一样的错误。
          • 这个问题是 undefined 可以重新定义,所以只有在你确定你的范围内不是这种情况时才使用它.
          • @AndrewHedges 正如其他人指出的那样,另一个问题是它假设 x 已声明。尝试将 "x == undefined" 粘贴到 JS 控制台中,您会得到一个引用错误。
          猜你喜欢
          • 2011-11-26
          • 2010-09-29
          • 2012-04-28
          • 2014-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-04
          • 2017-01-09
          相关资源
          最近更新 更多