0

後で定義されているかどうかを確認したいものに変数を設定するにはどうすればよいですか?

例: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)== "undefined"

行く方法です。

于 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
    }
}

これは、scripts配列が、ロード時にスクリプトが公開するグローバル変数を参照していることを前提としています。

ただし、あなたが何をしようとしているのか理解している場合は、適切な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 に答える