JavaScript中如何判断变量是否存在

9
我希望我的代码能够在特定变量存在时执行某个操作,否则将被忽略并继续执行。但是我的代码存在问题,如果特定变量不存在,它会导致错误,可能会忽略其余的JavaScript代码。
示例:
var YouTube=EpicKris;

if ((typeof YouTube) != 'undefined' && YouTube != null) {
    document.write('YouTube:' + YouTube);
};

可能是在JavaScript中检测未定义的对象属性的重复问题。 - Lee Gary
6个回答

7
try {
  if(YouTube) {
    console.log("exist!");
  }
} catch(e) {}
console.log("move one");

如果YouTube不是null、undefined、0或"",它将起作用。

这对你有用吗?


那么如果变量YouTube=EpicKris;不存在,或者变量YouTube=null;或者YouTube=0;,那么就不应该出现任何错误,其余的JavaScript代码应该继续运行? - Kristian Matthews
好的,我使用gurung的答案修复了它。现在只要YouTube存在且不为null、0或空字符串,代码就会执行。这个解决方案对你有效吗? - Chango
部分地讲,但我正在寻找一段简单的代码,既可以实现此功能,也可以在不存在 var YouTube=EpicKris; 的情况下工作。 - Kristian Matthews
如果变量EpicKris不存在?它应该可以工作。只需在try/catch块内进行赋值即可。 - Chango
我以前没有接触过try catch,所以我不完全理解它在做什么。 - Kristian Matthews
显示剩余2条评论

6

这是一个经典问题。

对于未定义的变量,可以使用“window”修饰符进行跨浏览器检查,这样就不会出错。

if (window.YouTube) { // won't puke
    // do your code
}

如果有一些要求比较苛刻的人...

if (this.YouTube) {
    // you have to assume you are in the global context though 
}

3
如果您处于不同的作用域,那么这样做将行不通。我不建议这样做。 - regality
是的,我也应该提到,将任何对象限定符作为根对象进行操作,比如说你有一个对象“something = {}”,然后你检查是否存在“something.x”,这样也不会出错。当编写引导插件时,我不得不这样做,例如window.myThing = window.myThing || {};等等。IE才是真正的原因,因为即使在v9版本中,IE仍然很落后。 - King Friday
那么如果变量YouTube=EpicKris;不存在,那么就不应该出现任何错误,其余的JavaScript代码应该继续运行? - Kristian Matthews
这是检查窗口对象上是否存在“YouTube”的代码。如果存在,则假定变量不为0、false、null、undefined或其他falsy值,并执行其中的代码。 - King Friday
实际上它可以在任何地方工作,除非你覆盖了window对象。这是在浏览器中的JavaScript,而不是在某个真空中。这是假设他的范围是根范围,因为他没有编写闭包。深入闭包,它会稍微慢一些。 - King Friday
1
+1 当我测试全局变量的存在和非假值时,我经常使用这种方法。如果你要测试的变量是全局的,它可以在所有浏览器中工作。 - jfriend00

3

代码:

var YouTube=EpicKris;

if (typeof YouTube!='undefined') {
    document.write('YouTube:' + YouTube);
};

我找到了最佳方法,可以使用typeof来检查变量是否存在。这对我非常有效。


1

使用try/catch怎么样:

try {
    //do stuff
} catch(e) { /* ignore */ }

你能解释一下这个给我听吗? - Kristian Matthews
这种方法并不是万能的,它等同于说“我不知道这个怎么工作,所以我会在那里放一些代码”。通常情况下,只有当你知道某些事情可能会因用户、网络或其他你无法控制的因素而失败时,才应该这样做。通常不包括那些你知道为什么会出错并且在你的控制范围内的事情。 - King Friday
@emeraldcode.com:啊,我以为OP想知道如何实现它。而且我假设他知道try/catch的作用。但是感谢您的解释,非常好。我相信它会帮助OP理解正在发生的事情(假设他以前从未听说过try/catch)。 - Bhesh Gurung

0

我相信这可能是你正在寻找的内容:

if (typeof(YouTube)!=='undefined'){
    if (YouTube!==undefined && YouTube!==null) {
        //do something if variable exists AND is set
    }
}

0

很简单...你可以用两种方式来做

var YouTube = window["EpicKris"] ;// or this["EpicKris"] or objectContainer["EpicKris"]

if( YouTube ) { //if is null or undefined (Zero and Empty String too), will be converted to false

    console.log(YouTube);// exists

}else{

    consol.log(YouTube);// null, undefined, 0, "" or false

}

或者你可以是

var YouTube = window["EpicKris"] ;// or this["EpicKris"] or objectContainer["EpicKris"]

if( typeof YouTube == "undefined" || YouTube == null ) { //complete test

    console.log(YouTube);//exists

}else{

    console.log(YouTube);//not exists

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接