0

如何将 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':
  .
  .
  .
}

有任何想法吗?提前致谢。

4

7 回答 7

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");
于 2012-08-03T13:37:17.850 回答
1

利用

if (typeof jQuery === "undefined")

检查未定义。

于 2012-08-03T13:29:53.953 回答
1

我不太明白你想要达到的目标,但我认为你可以做这样的事情

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

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

}
于 2012-08-03T13:30:19.180 回答
1

只需这样做:

var scriptName = 'jQuery';

if( !window.hasOwnProperty(scriptName) ){
    //jQuery is undefined
} 
于 2012-08-03T13:44:09.903 回答
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

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

于 2012-08-03T13:31:51.753 回答
0

你已经使用了typeof方法

typeof(variable_name)将根据变量为您提供“字符串”、“对象”、“未定义”或“数字”

typeof(jQuery) == "未定义"

是要走的路。

于 2012-08-03T13:32:44.687 回答
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);
}
于 2012-08-03T13:32:54.937 回答