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

Set JavaScript variable to check definition later

本文关键字:检查 定义 JavaScript 变量 设置      更新时间:2023-09-26

如何将var设置为稍后要检查其是否已定义的值?

示例:要检查是否没有定义jQuery,您可以这样做:

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

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

   var toCheckLater = jQuery;   // This fails.
   // Some time later.. 
   if (typeof(toCheckLater) === 'undefined') {
   }

我想做的是从数组中动态加载脚本,但我想提前设置稍后将检查其定义的变量。我想避免使用大量的if或switch语句。这意味着我希望找到一个比更优雅的解决方案

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

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

函数可以执行以下操作:

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");

使用

if (typeof jQuery === "undefined")

以检查是否未定义。

我不太明白你想要实现的目标,但我认为你可以做这样的

var toCheckLater = typeof jQuery; //if, for example, jQuery is defined you'll get "function"
// Some time later.. 
if (toCheckLater === 'undefined') {
}

只需执行以下操作:

var scriptName = 'jQuery';
if( !window.hasOwnProperty(scriptName) ){
    //jQuery is undefined
} 
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

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

您已经使用了typeof方法

typeof(variable_name)会根据变量给出"字符串"、"对象"、"未定义"或"数字"

typeof(jQuery)=="未定义"

是要走的路。

您的脚本数组:

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);
}