如何在 JavaScript 中检查未定义的变量

IT技术 javascript variables undefined
2021-02-09 17:42:57

我想检查变量是否已定义。例如,以下抛出未定义的错误

alert( x );

我怎样才能捕捉到这个错误?

6个回答

在 JavaScript 中,null是一个对象。不存在的东西还有另一个value,undefined. DOMnull在几乎所有无法在文档中找到某些结构的情况下都会返回,但在 JavaScript 中它本身undefined就是使用的值。

其次,不,没有直接的等价物。如果您真的想专门检查null,请执行以下操作:

if (yourvar === null) // Does not execute if yourvar is `undefined`

如果要检查变量是否存在,则只能使用try/来完成catch,因为typeof会将未声明的变量和使用 的值声明的变量undefined视为等价的。

但是,要检查变量是否已声明并且不是undefined

if (yourvar !== undefined) // Any scope

以前,必须使用typeof运算符来安全地检查 undefined,因为可以undefined像变量一样重新分配旧的方式是这样的:

if (typeof yourvar !== 'undefined') // Any scope

undefined可重新分配的问题已在 2009 年发布的 ECMAScript 5 中得到修复。您现在可以安全地使用===!==测试,undefined而无需使用typeofundefined因为一段时间以来一直处于只读状态。

如果你想知道一个成员是否独立存在但不关心它的value是什么:

if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance

如果你想知道一个变量是否为

if (yourvar)

来源

“在 JavaScript 中 null 是一个对象。”,这实际上不是真的,而且这种误解的罪魁祸首可能是typeof运算符 ( typeof null == 'object')。null是一个原始值,它是Null 类型的唯一值
2021-03-11 17:42:57
undefined 不是保留字;您(或其他人的代码)可以执行“undefined = 3”,这将破坏您的两个测试。
2021-03-24 17:42:57
“如果您知道变量存在但不知道其中是否存储了任何值”——嗯?!
2021-03-28 17:42:57
嗯...我刚刚注意到“来源”链接:整篇文章是从邮件列表中直接引用的,并且可能应该进行编辑以使其更清楚,因为原始作者无法澄清。
2021-03-30 17:42:57
我认为他指的是一个尚未分配给声明的变量。例如:var foo; // foo 存在但没有值
2021-04-03 17:42:57

真正测试变量的唯一方法undefined是执行以下操作。请记住, undefined 在 JavaScript 中是一个对象。

if (typeof someVar === 'undefined') {
  // Your variable is undefined
}

此线程中的一些其他解决方案会让您相信变量未定义,即使它已定义(例如,值为 NULL 或 0)。

唯一不产生ReferenceError.
2021-03-14 17:42:57
真的,我不认为 undefined 是一个对象,首先检查文档developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures
2021-03-17 17:42:57
因为这里的问题不是 UNDEFINED 应该是 typeof someVar !== 'undefined',对吧?
2021-03-22 17:42:57
这段代码是正确的,但我认为undefinedjavascript 中的对象是错误信息。无论如何,此陈述与您的答案有关吗?它是一个undefined类型undefined,分配给名为 的全局标识符undefined
2021-04-03 17:42:57
现在这是不正确的,因为它是唯一的方法。undefined自 ES5 以来一直是只读的。您可以if (x === undefined) {...}像这样使用或使用速记来安全地测试 undefined if (x === void 0)
2021-04-05 17:42:57

从技术上讲,正确的解决方案是(我相信):

typeof x === "undefined"

你有时会变得懒惰并使用

x == null

但这允许未定义的变量 x 和包含 null 的变量 x 返回 true。

你说的顶点是什么意思?
2021-03-17 17:42:57
所以没有办法检查未定义但已声明的变量吗?
2021-03-22 17:42:57
如果你输入var x;然后typeof x;你会得到"undefined"就像你那样typeof lakjdflkdsjflsj;
2021-03-29 17:42:57
ujndefined 不应该在顶点之间
2021-04-02 17:42:57
我不这么认为;我不确定你为什么想要。
2021-04-08 17:42:57

一个更简单、更简写的版本是:

if (!x) {
   //Undefined
}

或者

if (typeof x !== "undefined") {
    //Do something since x is defined.
}
其他评论指出第一个例子不好,但不清楚为什么。因此,对于任何新编码人员: !x 不会测试 x 是否已定义,而是测试它是否为真。字符串、布尔值 true 和正数都是真值(我可能会忘记一些事情),但其他可能有效的值,如 0、布尔假值和空字符串都不是真值。第一个示例适用于特定用例(例如,如果您可以将空视为未定义,则测试字符串),但由于许多地方不会,因此不应将其视为默认检查方式。
2021-03-12 17:42:57
如果 x 是从函数调用中设置的,则第一个代码段可能不正确。像 x = A(); 如果 A 不返回任何内容,则默认返回“未定义”。执行 !x 是正确的,这在逻辑上是正确的。但是,如果 A() 返回 0,则 !x 应该为假,因为 x=0。然而在 JS 中, !0 也是如此。
2021-03-14 17:42:57
@AlejandroSilva 抱歉回复晚了。这将不起作用,因为 typeof 返回一个字符串,因此它将为未定义的变量返回 'undefined',这反过来将评估为 TRUE,从而导致对已定义变量的误报。
2021-03-29 17:42:57
第二个代码可以缩短为: if(!typeof(XX)){ ... }else{ ... }
2021-04-08 17:42:57
请删除第一个片段,这很糟糕
2021-04-10 17:42:57

我经常这样做:

function doSomething(variable)
{
    var undef;

    if(variable === undef)
    {
         alert('Hey moron, define this bad boy.');
    }
}
这是无用的,因为无论如何您都无法将未定义的 var 传递给函数
2021-03-11 17:42:57
考虑将“==”更改为“===”。如果您调用 doSomething(null),您也会收到警报。除非那是你想要的。
2021-03-16 17:42:57
像这样简单检查-> if(typeof variableName !== 'undefined'){ alert(variableName);}
2021-03-21 17:42:57
是的。你必须决定你想要等价还是完全相等。这两种情况都有用。
2021-03-28 17:42:57
你当然可以。尝试调用不带参数的函数。
2021-04-09 17:42:57