我需要在 JavaScript 中传递变量名称列表并检查这些变量是否存在。我尝试了以下方法,但它似乎没有起作用(JSFiddle here):
var test1 = 'test1';
var test2 = 'test2';
function checkVariable(variableNameList) {
for (var iterator = 0; iterator < variableNameList.length; iterator++) {
var variableName = variableNameList[iterator];
if (typeof window[variableName] === 'undefined') {
alert('Variable ' + variableName + ' is not defined');
} else {
alert('Variable ' + variableName + ' is defined');
}
}
}
checkVariable(['test1', 'test2', 'test3']);
我正在尝试获取结果警报:
- 变量 test1 已定义。
- 变量 test2 已定义。
- 变量 test3 未定义。
使用下面的技巧似乎很容易修复,但是还有其他方法可以实现此目的吗?正在 window
下声明全局变量追踪他们的唯一方法?`
window.test1 = 'test1';
window.test2 = 'test2';
是否有更好的方法来做到这一点,或者这是正确的方法吗?
请仅使用 Vanilla JS 回答。
最佳答案
它不起作用,因为变量不在全局范围内,它们在 window.onload 函数范围内。
您的代码实际上是这样运行的:
window.addEventListener("load", function () {
var test1 = 'test1'; /* these are not global because of */
var test2 = 'test2'; /* running inside of window.onload */
function checkVariable(variableNameList) {
}
checkVariable(['test1', 'test2', 'test3']);
});
更改代码以在头部或正文末尾运行。我 fork 了你的代码以在头部运行:https://jsfiddle.net/phrhxyzL/1/然后您就会得到预期的结果。
关于javascript - 如何在 JavaScript 中不使用 `window` 检查动态全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34499427/