gpt4 book ai didi

JavaScript:如何通过变量名检查变量是否存在?

转载 作者:数据小太阳 更新时间:2023-10-29 06:03:09 25 4
gpt4 key购买 nike

我遇到了这个问题。我有一个检查变量是否存在的脚本,因为有些脚本是异步加载的,例如用于 Facebook 的 FB 或用于 Twitter 的 twttr。

function whenAvailable(name, callback, interval) {
interval || (interval = 100); // ms
window.setTimeout(function() {
if ((window.hasOwnProperty && window.hasOwnProperty(name)) || window[name] || !!eval(name)) {
return callback();
} else {
window.setTimeout(arguments.callee, interval);
}
}, interval);
}

看起来像这样

if ((window.hasOwnProperty && window.hasOwnProperty(name)) || window[name] || !!eval(name)) 

不起作用。 IE 抛出错误eval(name)——例如如果 name = 'FB',它表示无法评估未定义的 'FB'。

如果 name == 'twttr.widgets'

window.hasOwnProperty(name) 不起作用。

是否有通用的跨浏览器检查变量名称是否存在变量?

最佳答案

首先,您不需要 eval(您几乎从不这样做),您可以使用字符串和括号表示法对 JavaScript 对象进行索引,例如:

window['FB'];

name = 'FB';
foo = window[name];

所以要检查:

if (typeof window[name] === "undefined")

...除了不区分根本不存在的属性,或存在但具有值 undefined 的属性。

if (name in window)

...但这会检查原型(prototype)和对象。不过,window 没问题。

window.hasOwnProperty(name) does not work if name == 'twttr.widgets'.

对了,你必须把它拆开:

var index = 0,
parts = name.split('.'), // doesn't handle [] notation
result;
result = window;
index = 0;
try {
while (typeof result !== "undefined" && result !== null && index < parts.length) {
result = result[parts[index++]];
}
}
catch (e) {
}
if (index < parts.length) {
// Didn't find all of it
}

...或类似的东西。

关于JavaScript:如何通过变量名检查变量是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9928914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com