我想检查变量是否有定义。例如,下面的代码会抛出一个未定义的错误
alert( x );
我如何捕捉这个错误?
我想检查变量是否有定义。例如,下面的代码会抛出一个未定义的错误
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.');
}
}
一个更简单、更简洁的版本是:
if (!x) {
//Undefined
}
OR
if (typeof x !== "undefined") {
//Do something since x is defined.
}
从技术上讲,正确的解决方案是(我认为):
typeof x === "undefined"
你有时会偷懒,使用
x == null
但是这允许一个未定义的变量x和一个包含null的变量x返回true。
就像下面这样做:
function isNotDefined(value) {
return typeof value === "undefined";
}
叫它:
isNotDefined(undefined); //return true
isNotDefined('Alireza'); //return false
公认的答案是正确的。只是想多一个选择。你也可以用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块,它有点混乱,因为它创建了块级作用域。当然,为了回答问题,这个例子非常简单,它不包括错误处理的最佳实践;)