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

alert( x );

我如何捕捉这个错误?


当前回答

对不起,这里的大多数答案都混淆了“未定义”和“未定义”。

Undefined -一个变量声明了,但它的值是未定义的。 没有定义-变量甚至没有声明。

检查这两种情况的唯一安全方法是使用typeof myVar === 'undefined'

myVar === undefined将只检查case number(1)。如果myVar甚至没有声明,它仍然会抛出“myVar is not defined”for case number(2)。OP特别询问了“甚至没有定义”的情况(2)。

附注:我确实理解“情况2”在现代ES6世界中变得越来越少,但一些旧的遗留组件仍然存在于过去。

其他回答

我经常这样做:

function doSomething(variable)
{
    var undef;

    if(variable === undef)
    {
         alert('Hey moron, define this bad boy.');
    }
}

我们可以像下面这样检查undefined

var x; 

if (x === undefined) {
    alert("x is undefined");
} else {
     alert("x is defined");
}

就像下面这样做:

function isNotDefined(value) {
  return typeof value === "undefined";
}

叫它:

isNotDefined(undefined); //return true
isNotDefined('Alireza'); //return false

我使用一个小函数来验证变量是否已声明,这确实减少了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 }

对不起,这里的大多数答案都混淆了“未定义”和“未定义”。

Undefined -一个变量声明了,但它的值是未定义的。 没有定义-变量甚至没有声明。

检查这两种情况的唯一安全方法是使用typeof myVar === 'undefined'

myVar === undefined将只检查case number(1)。如果myVar甚至没有声明,它仍然会抛出“myVar is not defined”for case number(2)。OP特别询问了“甚至没有定义”的情况(2)。

附注:我确实理解“情况2”在现代ES6世界中变得越来越少,但一些旧的遗留组件仍然存在于过去。