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

How to check a not-defined variable in JavaScript

我想检查变量是否被定义。例如,以下引发了一个未定义的错误

1
alert( x );

如何捕获此错误?


在javascript中,null是一个对象。对于不存在的事物还有另一个价值,undefined。对于几乎所有在文档中找不到某些结构的情况,DOM都返回null,但在javascript本身中,undefined是所使用的值。

第二,不,没有直接等价物。如果您真的想检查null的具体内容,请执行以下操作:

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

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

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

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

注意,这是胡说,因为可能有一个名为undefined的变量:

1
if (yourvar !== undefined)

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

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

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

1
if (yourvar)

来源


要真正测试变量是否为undefined,唯一的方法是执行以下操作。记住,未定义是JavaScript中的一个对象。

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

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


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

1
typeof x ==="undefined"

你有时会变得懒惰和有用

1
x == null

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


我经常这样做:

1
2
3
4
5
6
7
8
9
function doSomething(variable)
{
    var undef;

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


更简单、更简略的版本是:

1
2
3
if (!x) {
   //Undefined
}

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


另一个可能的"解决方案"是使用window对象。它避免了在浏览器中出现引用错误问题。

1
2
3
4
5
if (window.x) {
    alert('x exists and is truthy');
} else {
    alert('x does not exist, or exists and is falsy');
}


还可以使用三元条件运算符:

1
2
var a ="hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a =" + a);

1
2
//var a ="hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a =" + a);


我经常用最简单的方法:

1
2
3
4
5
6
var variable;
if (variable === undefined){
    console.log('Variable is undefined');
} else {
    console.log('Variable is defined');
}

编辑:

在不初始化变量的情况下,将引发异常:"未捕获引用错误:未定义变量…"


只需执行以下操作:

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

就像这样称呼它:

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

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

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

1
2
3
4
5
6
7
function varExists(el) {
  if ( typeof el !=="undefined" && typeof el.val() !=="undefined" ) {
    return true;
  } else {
    return false;
  }
}

然后,您可以使用条件语句来测试变量是否已这样定义和实例化…

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

或者测试它是否还没有被定义和实例化…

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


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

例如:

1
2
3
4
5
6
void 0
// undefined

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


错误是告诉您,x甚至不存在!它尚未声明,这与分配值不同。

1
2
var x; // declaration
x = 2; // assignment

如果您声明为x,则不会得到错误。你会得到一个警告,说undefined,因为x存在/已声明,但尚未分配值。

要检查变量是否已声明,可以使用typeof,检查变量是否存在的任何其他方法都会引发与最初相同的错误。

1
2
3
if(typeof x  !== "undefined") {
    alert(x);
}

这是检查存储在x中的值的类型。只有当x尚未声明或已声明但尚未分配时,才会返回undefined


接受的答案是正确的。只想再增加一个选项。您也可以使用try ... catch块来处理这种情况。一个奇怪的例子:

1
2
3
4
5
6
7
8
9
10
var a;
try {
    a = b + 1;  // throws ReferenceError if b is not defined
}
catch (e) {
    a = 1;      // apply some default behavior in case of error
}
finally {
    a = a || 0; // normalize the result in any case
}

注意catch块,它有点混乱,因为它创建了一个块级范围。当然,这个例子非常简化以回答问题,它不包括错误处理的最佳实践;)。


我们可以检查undefined如下

1
2
3
4
5
6
7
var x;

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