【问题标题】:Javascript variable or new function causing errors in IE在 IE 中导致错误的 Javascript 变量或新函数
【发布时间】:2026-02-20 00:30:02
【问题描述】:

大家好,我对 Internet Explorer 中的此语句有疑问, 我想知道是否有更明智的方法来做到这一点?

var NEWVARIABLE = NEWVARIABLE || {};
NEWVARIABLE.Tools = NEWVARIABLE.Tools || {};

它给了我NEWVARIABLE不存在的错误

【问题讨论】:

  • 您的代码没有任何意义。你想完成什么?
  • @SamuelEdwinWard 这是在创建一个命名空间,非常有意义,你只是从未见过这个
  • 该代码在语法或功能上没有任何问题,错误信息是什么?

标签: javascript


【解决方案1】:

您不能使用(或测试)未定义的变量。我最初认为这就是您对以下语句所做的事情

var NEWVARIABLE = NEWVARIABLE || {};

但是,多亏了 Fabrício,我意识到 var 声明被提升(移动到脚本标记的顶部,因此在遇到语句时已经声明了。

测试变量是否存在的比较简单的方法是使用typeof === 'undefined' 来查看变量是否存在

var NEWVARIABLE;
if (typeof NEWVARIABLE === 'undefined') {
    NEWVARIABLE = {};
}

在检查属性时可以使用相同的样式,不必对属性使用typeof 测试,即使未定义也可以对其进行测试。

【讨论】:

  • 如果 NEWVARIABLE 未定义,NEWVARIABLE 是否被构造为新对象?
  • @My_Boon 您正在通过运行 if 测试来使用它,您不能尝试从未定义的变量中读取数据
  • AFAIK,如果尚未定义变量,var 声明将被提升到范围的顶部并具有本机值 undefined,直到在运行时达到分配。似乎可以处理这个fiddle
  • 确实,我一直都这样
  • 这里有评论fiddle,+1 表示格外谨慎。
【解决方案2】:

您已接受答案,但其中包含误导性陈述:

您不能使用(或测试)未定义的变量。这就是你正在做的事情

变量已声明,所以它不是你在做的。

在OP中,代码:

> var NEWVARIABLE = NEWVARIABLE || {};
> NEWVARIABLE.Tools = NEWVARIABLE.Tools || {};

不包含语法错误,它会抛出错误的唯一情况是如果 NEWVARIABLE 已经存在并且具有在尝试访问或分配给它时抛出错误的工具属性(某些主机对象可能会发生)。

如果 NEWVARIABLE 之前已被分配一个原生对象或原始值,它不会抛出错误,尽管结果可能不是您所期望的。

【讨论】:

  • @ehime 我知道我的回答没有解决这个问题,但我也看不出这如何回答这个问题。它只是解释了我的问题出了什么问题,并没有建议 OP 需要做什么来解决它?爱媛,你最终的解决方案是什么?
  • @JuanMendes — 我指出 OP 中没有足够的信息来提供明确的答案,因此解释了为什么会出现错误,作为尝试寻找什么的提示修复它。
  • 我明白你做了什么,我只是想了解为什么 OP 认为这是正确的答案。
最近更新 更多