我想检查变量是否有定义。例如,下面的代码会抛出一个未定义的错误
alert( x );
我如何捕捉这个错误?
我想检查变量是否有定义。例如,下面的代码会抛出一个未定义的错误
alert( x );
我如何捕捉这个错误?
当前回答
真正测试变量是否未定义的唯一方法是执行以下操作。记住,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块,它有点混乱,因为它创建了块级作用域。当然,为了回答问题,这个例子非常简单,它不包括错误处理的最佳实践;)
在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)
源
我们可以像下面这样检查undefined
var x;
if (x === undefined) {
alert("x is undefined");
} else {
alert("x is defined");
}
void操作符对于传递给它的任何参数/表达式都返回undefined。因此,您可以根据结果进行测试(实际上,一些微型程序将代码从undefined更改为void 0以节省几个字符)
例如:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
从技术上讲,正确的解决方案是(我认为):
typeof x === "undefined"
你有时会偷懒,使用
x == null
但是这允许一个未定义的变量x和一个包含null的变量x返回true。