如何将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':
.
.
.
}
有什么想法吗? 提前谢谢。
答案 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);
}