为什么在将变量与undefined进行比较时会出现"变量未定义"错误?

sab*_*669 1 javascript

我看了这个问题:

如何确定变量是"未定义"还是"空"?

但它没有帮助.

我有以下代码:

    if (_modeID != 8 && _modeID != 9)
        // do something
Run Code Online (Sandbox Code Playgroud)

_modeID 在一个单独的文件中定义并分配一个值.

我遇到了一个错误,由于某种原因,var _modeID = someIntVal;它永远不会执行,所以当if上面的语句运行时根本就没有_modeID.

我将它扩展为if (_modeID === null || _modeID === undefined || (_modeID != 8 && _modeID != 9)但仍会引发以下错误:

ReferenceError - Java脚本错误:'_modeID'未定义

我希望在这种情况下,第一个或第二个条件会评估为真,但显然不是.谁能解释我做错了什么?

var _modeID = undefined; if (_modeID === undefined) ...简单地if (_modeID === undefined) ...假设这两个片段是"完整"文件是不一样的?

Qua*_*cal 5

我通常看到人们检查变量的类型而不是变量本身,即

if( typeof _modeID === 'undefined' ) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • *reason*是`if(_modeID === undefined)`如果`_modeID`是一个不可解析的符号(未在任何包含的范围内声明)将抛出`ReferenceError`.但是`if(typeof _modeID ==="undefined")`即使`_modeID`无法解析也不会抛出; 相反,`typeof _modeID`的结果是``undefined'`. (2认同)