设置JavaScript变量以便稍后检查定义

时间:2012-08-03 13:27:37

标签: javascript jquery

如何将var设置为您想要稍后检查它是否已定义的内容?

示例:要检查是否未定义jQuery,请执行以下操作:

if (typeof(jQuery) === 'undefined') { 
}

但如果我想做这样的事情(这显然不起作用)怎么办:

   var toCheckLater = jQuery;   // This fails.

   // Some time later.. 
   if (typeof(toCheckLater) === 'undefined') {
   }

我要做的是从数组动态加载脚本,但我想提前设置我将在稍后检查其定义的变量。而且我想避免大块的ifs或switch语句。意思是我希望找到比以下更优雅的解决方案:

switch (scriptName) {
  case 'jQuery': 
    if (typeof(jQuery) === 'undefined') {
    }
    break;
  case 'someOtherScriptName':
  .
  .
  .
}

有什么想法吗? 提前谢谢。

7 个答案:

答案 0 :(得分:2)

一个功能可以:

var toCheckLater = function() { return typeof jQuery == "undefined"; }

// later:
toCheckLater()

你也可以使用面料来实现这些功能:

function getChecker(name) {
    return function() {
        return typeof window[name] == "undefined";
        // alternative:
        return name in window; // can be undefined, but the variable exists
    };
}
var toCheckLater = getChecker("jQuery");

答案 1 :(得分:1)

使用

if (typeof jQuery === "undefined")

检查未定义。

答案 2 :(得分:1)

我不太了解你想要实现的目标,但我认为你可以做这样的事情

var toCheckLater = typeof jQuery; //if, for example, jQuery is defined you'll get "function"

// Some time later.. 
if (toCheckLater === 'undefined') {

}

答案 3 :(得分:1)

只需这样做:

var scriptName = 'jQuery';

if( !window.hasOwnProperty(scriptName) ){
    //jQuery is undefined
} 

答案 4 :(得分:0)

var checker = function(scriptArray) {
  for(var i in scriptArray) 
    this[i] = i?i:loadScript(i); // make your own loadScript function
}

checker({'jquery','anothercode'});

//access checker.jquery / checker.anothercode

你可以使用这样的东西。创建一个加载所有脚本的“类”。

答案 5 :(得分:0)

您已使用typeof方法

typeof(variable_name)会根据变量给出“string”,“object”,“undefined”或“number”

typeof(jQuery) == "undefined"

是要走的路。

答案 6 :(得分:0)

您的脚本数组:

var scripts = ['script1', 'jQuery'];

加载脚本后,您可以使用相同的数组并循环遍历它。

for (var i = 0, n = scripts.length; i !== n; i++) {
    if (!window.scripts[i]) {
        // falsy
    }
}

这假设脚本数组引用了脚本在加载时将公开的全局变量。

但是,如果我理解你的目标,那么更好的方法是在加载适当的script元素时注册回调。有关示例,请参阅以下问题:(1)(2)

这样的代码非常标准:

function loadScriptAsync(src, callback) {
    var script = document.createElement('script'),
        place = document.getElementsByTagName('script')[0];

    script.type = "text/javascript";
    script.async = true;
    script.src = src;
    script.onload = script.onreadystatechange = function() {
        callback();
        // clean up for IE and Opera
        script.onload = null;
        script.onreadystatechange = null;
    };

    place.parentNode.insertBefore(script, place);
}