我想检查变量是否有定义。例如,下面的代码会抛出一个未定义的错误

alert( x );

我如何捕捉这个错误?


当前回答

在JavaScript中,null是一个对象。对于不存在的东西,还有另一个值,未定义。DOM在几乎所有无法在文档中找到某些结构的情况下都会返回null,但在JavaScript中使用的值是undefined。

第二,不,没有直接的等价物。如果你真的想检查是否为空,请执行:

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

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

但是,要检查变量是否已声明且未定义:

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

以前,必须使用typeof操作符安全地检查未定义,因为可以像变量一样重新赋值未定义。旧的方法是这样的:

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

在2009年发布的ECMAScript 5中修正了undefined可重赋的问题。现在,您可以安全地使用===和!==来测试未定义,而无需使用typeof,因为未定义已经只读了一段时间。

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

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

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

if (yourvar)

其他回答

void操作符对于传递给它的任何参数/表达式都返回undefined。因此,您可以根据结果进行测试(实际上,一些微型程序将代码从undefined更改为void 0以节省几个字符)

例如:

void 0
// undefined

if (variable === void 0) {
    // variable is undefined
}

我经常用最简单的方法:

var variable;
if (variable === undefined){
    console.log('Variable is undefined');
} else {
    console.log('Variable is defined');
}

编辑:

如果没有初始化变量,将抛出异常"Uncaught ReferenceError: variable is not defined…"

我使用一个小函数来验证变量是否已声明,这确实减少了javascript文件中的混乱量。我添加了一个值检查,以确保变量不仅存在,而且还分配了一个值。第二个条件检查变量是否也已被实例化,因为如果变量已定义但未被实例化(参见下面的示例),如果您试图在代码中引用它的值,它仍然会抛出一个错误。

未实例化- var my_variable;实例化- var my_variable = "";

function varExists(el) { 
  if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) { 
    return true; 
  } else { 
    return false; 
  } 
}

然后你可以使用一个条件语句来测试变量是否已经被定义和实例化,就像这样…

if ( varExists(variable_name) ) { // checks that it DOES exist } 

或者测试它没有被定义和实例化使用…

if( !varExists(variable_name) ) { // checks that it DOESN'T exist }

在JavaScript中,null是一个对象。对于不存在的东西,还有另一个值,未定义。DOM在几乎所有无法在文档中找到某些结构的情况下都会返回null,但在JavaScript中使用的值是undefined。

第二,不,没有直接的等价物。如果你真的想检查是否为空,请执行:

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

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

但是,要检查变量是否已声明且未定义:

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

以前,必须使用typeof操作符安全地检查未定义,因为可以像变量一样重新赋值未定义。旧的方法是这样的:

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

在2009年发布的ECMAScript 5中修正了undefined可重赋的问题。现在,您可以安全地使用===和!==来测试未定义,而无需使用typeof,因为未定义已经只读了一段时间。

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

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

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

if (yourvar)

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

if (!x) {
   //Undefined
}

OR

if (typeof x !== "undefined") {
    //Do something since x is defined.
}