提问人:Jineesh 提问时间:5/13/2009 最后编辑:Josh CrozierJineesh 更新时间:2/2/2022 访问量:1393711
如何在 JavaScript 中检查未定义的变量
How to check a not-defined variable in JavaScript
答:
在 JavaScript 中,是一个对象。对于不存在的事物,还有另一个价值。DOM 几乎在所有情况下都返回它无法在文档中找到某些结构,但在 JavaScript 中是使用的值。null
undefined
null
undefined
其次,不,没有直接的等价物。如果您真的想专门检查,请执行以下操作:null
if (yourvar === null) // Does not execute if yourvar is `undefined`
如果要检查变量是否存在,则只能使用 /,因为会将未声明的变量和以 的值 声明的变量视为等价变量。try
catch
typeof
undefined
但是,要检查变量是否已声明且未声明:undefined
if (yourvar !== undefined) // Any scope
以前,必须使用运算符来安全地检查未定义,因为可以像变量一样重新赋值。旧的方式是这样的:typeof
undefined
if (typeof yourvar !== 'undefined') // Any scope
在 2009 年发布的 ECMAScript 5 中修复了可重新分配的问题。您现在可以安全地使用和测试,而无需使用,因为已经有一段时间是只读的了。undefined
===
!==
undefined
typeof
undefined
如果你想知道一个成员是否独立存在,但不关心它的值是什么:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
如果你想知道一个变量是否为真值:
if (yourvar)
评论
从技术上讲,正确的解决方案是(我相信):
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.');
}
}
评论
真正测试变量是否为的唯一方法是执行以下操作。请记住,undefined 是 JavaScript 中的一个对象。undefined
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
此线程中的其他一些解决方案将使您相信变量是未定义的,即使它已经定义(例如,其值为 NULL 或 0)。
评论
ReferenceError
undefined
undefined
undefined
undefined
undefined
if (x === undefined) {...}
if (x === void 0)
我经常使用最简单的方法:
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
您还可以使用三元条件运算符:
var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
//var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
评论
var a = false;
a===undefined
var x;
!a
undefined
0
null
false
我们可以检查如下undefined
var x;
if (x === undefined) {
alert("x is undefined");
} else {
alert("x is defined");
}
公认的答案是正确的。只是想再添加一个选项。您也可以使用 block 来处理这种情况。一个怪异的例子: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
另一个潜在的“解决方案”是使用对象。它避免了在浏览器中出现引用错误问题。window
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
评论
undefined
错误告诉你,这甚至不存在!它尚未声明,这与分配值不同。x
var x; // declaration
x = 2; // assignment
如果声明 ,则不会出现错误。你将收到一个警报,指出因为存在/已声明,但尚未分配值。x
undefined
x
要检查变量是否已声明,可以使用 ,任何其他检查变量是否存在的方法都会引发您最初遇到的相同错误。typeof
if(typeof x !== "undefined") {
alert(x);
}
这将检查存储在 中的值的类型。它只会在尚未声明时返回,或者如果已声明但尚未分配。x
undefined
x
评论
typeof
void
运算符返回传递给它的任何参数/表达式。因此,您可以根据结果进行测试(实际上,一些压缩器将您的代码从 更改为 to 以保存几个字符)undefined
undefined
void 0
例如:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
评论
typeof
undefined
undefined
void 0
undefined
我使用一个小函数来验证变量是否已声明,这确实减少了我的 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"
只需执行以下操作:
function isNotDefined(value) {
return typeof value === "undefined";
}
并这样称呼它:
isNotDefined(undefined); //return true
isNotDefined('Alireza'); //return false
对不起,死灵,但这里的大多数答案都混淆了“未定义”和“未定义”
未定义 - 已声明变量,但其值未定义。
未定义 - 甚至没有声明变量。
检查这两种情况的唯一安全方法是使用typeof myVar === 'undefined'
myVar === undefined
将仅检查案例编号 (1)。如果甚至没有声明,它仍然会为案例编号 (2) 抛出“myVar is not defined”。OP 特别询问了“甚至没有定义”的情况 (2)。myVar
P.S. 我确实知道“案例 2”在现代 ES6 世界中变得越来越少见,但一些旧的遗留组件仍然存在于过去。
评论
上一个:从键/值对文件设置环境变量
评论