我想检查变量是否有定义。例如,下面的代码会抛出一个未定义的错误
alert( x );
我如何捕捉这个错误?
我想检查变量是否有定义。例如,下面的代码会抛出一个未定义的错误
alert( x );
我如何捕捉这个错误?
当前回答
我经常用最简单的方法:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
编辑:
如果没有初始化变量,将抛出异常"Uncaught ReferenceError: variable is not defined…"
其他回答
我经常这样做:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
我使用一个小函数来验证变量是否已声明,这确实减少了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是JavaScript中的一个对象。
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
这个线程中的其他一些解决方案会让你相信一个变量是未定义的,即使它已经定义了(例如,值为NULL或0)。
公认的答案是正确的。只是想多一个选择。你也可以用try…Catch块来处理这种情况。举个奇怪的例子:
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块,它有点混乱,因为它创建了块级作用域。当然,为了回答问题,这个例子非常简单,它不包括错误处理的最佳实践;)
这个错误告诉你x根本不存在!它没有被声明,这与被赋值是不同的。
var x; // declaration
x = 2; // assignment
如果你声明了x,就不会出现错误。你会得到一个警告,说未定义,因为x存在/已经声明,但还没有被赋值。
要检查变量是否已声明,您可以使用typeof,任何其他检查变量是否存在的方法都会引发与初始时相同的错误。
if(typeof x !== "undefined") {
alert(x);
}
这是检查存储在x中的值的类型。只有当x尚未声明或已声明且尚未赋值时,它才会返回undefined。