如何检查JavaScript中未定义的变量
我想检查变量是否已定义。例如,下面抛出一个未定义的错误如何检查JavaScript中未定义的变量,javascript,variables,undefined,Javascript,Variables,Undefined,我想检查变量是否已定义。例如,下面抛出一个未定义的错误 alert( x ); 如何捕获此错误?在JavaScript中,null是一个对象。对于不存在的事物,还有另一个值,未定义。对于几乎所有无法在文档中找到某种结构的情况,DOM都返回null,但在JavaScript本身中,使用的值是undefined 第二,不,没有直接的等价物。如果您确实想专门检查null,请执行以下操作: if (yourvar === null) // Does not execute if yourvar is
alert( x );
如何捕获此错误?在JavaScript中,
null
是一个对象。对于不存在的事物,还有另一个值,未定义
。对于几乎所有无法在文档中找到某种结构的情况,DOM都返回null
,但在JavaScript本身中,使用的值是undefined
第二,不,没有直接的等价物。如果您确实想专门检查null
,请执行以下操作:
if (yourvar === null) // Does not execute if yourvar is `undefined`
如果要检查变量是否存在,则只能使用try
/catch
,因为typeof
会将未声明的变量和声明值为未定义的变量视为等效变量
但是,要检查变量是否已声明且未定义,请执行以下操作:
if (yourvar !== undefined) // Any scope
以前,有必要使用typeof
操作符来安全地检查未定义,因为可以像变量一样重新分配undefined
。老办法是这样的:
if (typeof yourvar !== 'undefined') // Any scope
2009年发布的ECMAScript 5解决了未定义
可重新分配的问题。您现在可以安全地使用==
和==不使用typeof
测试未定义的
,因为未定义的
已只读一段时间
如果您想知道成员是否独立存在,但不关心其值是什么:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
如果您想知道某个变量是否为:
从技术上讲,正确的解决方案是(我相信):
你有时会变得懒惰,并使用它
x == null
但这允许未定义的变量x和包含null的变量x都返回true。更简单、更简捷的版本是:
if (!x) {
//Undefined
}
或
我经常这样做:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
真正测试变量是否未定义的唯一方法是执行以下操作。记住,undefined是JavaScript中的一个对象
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
此线程中的其他一些解决方案会让您认为变量是未定义的,即使它已定义(例如,值为NULL或0)。我通常使用最简单的方法:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
编辑:
如果不初始化变量,将引发异常“未捕获引用错误:未定义变量…”您也可以使用三元条件运算符:
var a=“你好世界”;
变量a=!A.document.write(“我不知道‘a’”):document.write(“a=“+a”)代码>我们可以检查未定义的
,如下所示
var x;
if (x === undefined) {
alert("x is undefined");
} else {
alert("x is defined");
}
公认的答案是正确的。只是想再增加一个选项。您也可以使用尝试。。。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
block,它有点凌乱,因为它创建了块级范围。当然,为了回答所提出的问题,该示例非常简单,它不包括错误处理方面的最佳实践;) 另一个潜在的“解决方案”是使用窗口
对象。它避免了在浏览器中出现参考错误问题
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
错误告诉您,x
甚至不存在!它没有被声明,这与被赋值不同
var x; // declaration
x = 2; // assignment
如果声明了x
,则不会出现错误。您将收到一个提示,提示未定义
,因为x
存在/已声明,但尚未分配值
要检查变量是否已声明,可以使用typeof
,任何其他检查变量是否存在的方法都会引发与最初相同的错误
if(typeof x !== "undefined") {
alert(x);
}
这是检查存储在x
中的值的类型。当x
尚未声明或已声明但尚未赋值时,它将仅返回undefined
。对于传递给它的任何参数/表达式,运算符将返回undefined
。因此,您可以根据结果进行测试(实际上,一些缩微器会将代码从undefined
更改为void 0
,以保存几个字符)
例如:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
我使用一个小函数来验证变量是否已声明,这确实减少了javascript文件中的混乱程度。我为该值添加了一个检查,以确保该变量不仅存在,而且还被分配了一个值。第二个条件检查变量是否也已实例化,因为如果变量已定义但未实例化(请参见下面的示例),如果您尝试在代码中引用它的值,它仍将抛出错误
未实例化-var my_变量代码>实例化-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 }
只需执行以下操作:
function isNotDefined(value) {
return typeof value === "undefined";
}
把它叫做:
isNotDefined(undefined); //return true
isNotDefined('Alireza'); //return false
未定义不是保留字;您(或其他人的代码)可以执行“undefined=3”,这将破坏您的两个测试。“如果您知道变量存在,但不知道其中是否存储了任何值”——嗯?!我认为他指的是一个声明的变量,该变量尚未赋值。例如:var foo;//foo存在但没有值hmmm。。。我刚刚注意到了“source”链接:这篇文章是从邮件列表中直接引用的,可能应该进行编辑以使其更清楚,因为原始作者无法澄清。“在JavaScript中,null是一个对象。”,这实际上不是真的,而且这种误解的罪魁祸首可能是typeof
操作符(<代码> Type of NoL=='Objult'/Cult>).a是唯一的值。考虑更改“==”到“===”。如果调用DOSEMOTY(NULL),也将得到
if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
function isNotDefined(value) {
return typeof value === "undefined";
}
isNotDefined(undefined); //return true
isNotDefined('Alireza'); //return false