我想检查变量是否已定义。例如,以下抛出未定义的错误
alert( x );
我怎样才能捕捉到这个错误?
在 JavaScript 中,null
是一个对象。对于不存在的事物还有另一个价值,undefined
。对于几乎所有无法在文档中找到某些结构的情况,DOM 都会返回 null
,但在 JavaScript 本身中,undefined
是使用的值。
其次,不,没有直接的等价物。如果您真的想专门检查 null
,请执行以下操作:
if (yourvar === null) // Does not execute if yourvar is `undefined`
如果要检查变量是否存在,只能使用 try
/catch
来完成,因为 typeof
会将未声明的变量和使用 undefined
值声明的变量视为等效的。
但是,要检查一个变量是否声明了 并且 不是 undefined
:
if (yourvar !== undefined) // Any scope
以前,必须使用 typeof
运算符来安全地检查 undefined,因为可以像变量一样重新分配 undefined
。旧方式如下所示:
if (typeof yourvar !== 'undefined') // Any scope
undefined
可重新分配的问题已在 2009 年发布的 ECMAScript 5 中得到解决。您现在可以安全地使用 ===
和 !==
来测试 undefined
而无需使用 typeof
,因为 undefined
只读了一段时间。
如果你想知道一个成员是否独立存在但不关心它的值是什么:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
如果您想知道变量是否为 truthy:
if (yourvar)
真正测试变量是否为 undefined
的唯一方法是执行以下操作。请记住,未定义是 JavaScript 中的一个对象。
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
这个线程中的一些其他解决方案会让你相信一个变量是未定义的,即使它已经定义(例如,值为 NULL 或 0)。
ReferenceError
的测试。
undefined
是 javascript 中的一个对象是错误信息。这个陈述是否与您的答案有关?它是 undefined
类型的值 undefined
,分配给名为 undefined
的全局标识符。
undefined
自 ES5 以来一直是只读的。您可以使用 if (x === undefined) {...}
或使用如下简写安全地测试未定义:if (x === void 0)
。
从技术上讲,正确的解决方案是(我相信):
typeof x === "undefined"
你有时会变得懒惰并使用
x == null
但这允许未定义的变量 x 和包含 null 的变量 x 返回 true。
var x;
,然后输入 typeof x;
,您将得到 "undefined"
,就像您输入 typeof lakjdflkdsjflsj;
一个更简单、更简写的版本是:
if (!x) {
//Undefined
}
或者
if (typeof x !== "undefined") {
//Do something since x is defined.
}
我经常这样做:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
void
运算符为传递给它的任何参数/表达式返回 undefined
。因此您可以针对结果进行测试(实际上一些缩小器将您的代码从 undefined
更改为 void 0
以保存几个字符)
例如:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeof
并认为 undefined
可以重新分配,这在大约十年来一直是不可能的。
undefined
,因为只有上帝知道是什么原因,使用 void 0
总是会返回 undefined
无论如何。
很抱歉死灵,但这里的大多数答案都混淆了“未定义”和“未定义”
未定义 - 声明了一个变量,但它的值未定义。未定义 - 甚至没有声明变量。
检查这两种情况的唯一安全方法是使用 typeof myVar === 'undefined'
myVar === undefined
将仅检查案例编号 (1)。如果甚至没有声明 myVar
,它仍然会为案例编号 (2) 抛出“myVar is not defined”。 OP专门询问“甚至没有定义”的情况(2)。
PS 我确实理解“案例 2”在现代 ES6 世界中变得越来越少,但一些旧的遗留组件仍然存在于过去。
该错误告诉您 x
甚至不存在!它没有被声明,这与被分配一个值不同。
var x; // declaration
x = 2; // assignment
如果您声明了 x
,您将不会收到错误消息。您会收到一条提示 undefined
,因为 x
存在/已声明但尚未分配值。
要检查变量是否已声明,您可以使用 typeof
,任何其他检查变量是否存在的方法都会引发您最初遇到的相同错误。
if(typeof x !== "undefined") {
alert(x);
}
这是检查存储在 x
中的值的类型。只有当 x
尚未声明或 已 已声明但尚未分配时,它才会返回 undefined
。
typeof
运算符。
另一个潜在的“解决方案”是使用 window
对象。它避免了在浏览器中的引用错误问题。
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
undefined
。这不会那样做。
只需执行以下操作:
function isNotDefined(value) {
return typeof value === "undefined";
}
并称之为:
isNotDefined(undefined); //return true
isNotDefined('Alireza'); //return false
您还可以使用三元条件运算符:
var a = "你好世界"; var a = !a ? document.write("我不知道'a'") : document.write("a = " + a);
//var a = "你好世界"; var a = !a ? document.write("我不知道'a'") : document.write("a = " + a);
var a = false;
怎么办?您应该检查 if a===undefined
var x;
执行上述操作会引发错误
!a
不仅将测试 undefined
的真值,它还将测试 0
和 null
和 false
的真值。这是非常不正确的,应该删除。
我经常使用最简单的方法:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
编辑:
不初始化变量,会抛出异常“Uncaught ReferenceError: variable is not defined...”
Uncaught ReferenceError: variable is not defined
variable
由 var variable;
定义。此代码段将覆盖本地范围内的 variable
。它可以破坏期望访问闭包或全局变量的逻辑。即:var variable = 1; function test() { var variable; if (variable === undefined){ console.log('Variable is undefined'); } else { console.log('Variable is defined: ' + variable); } } test(); // Variable is undefined
接受的答案是正确的。只是想再添加一个选项。您也可以使用 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
块,它有点混乱,因为它创建了块级范围。而且,当然,该示例非常简化以回答所提出的问题,它不包括错误处理的最佳实践;)。
我们可以检查undefined
如下
var x;
if (x === undefined) {
alert("x is undefined");
} else {
alert("x is defined");
}
我使用一个小函数来验证变量是否已被声明,这确实减少了我的 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 }
return typeof el !== "undefined" && typeof el.val() !== "undefined"
typeof
运算符(typeof null == 'object'
)。null
value 是一个 primitive value,它是 Null type 的唯一值。