我需要在JavaScript中传递一个变量名列表,并检查这些变量是否存在.我尝试了以下但它似乎没有做的伎俩(JSFiddle 在这里):
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';
有没有更好的方法来做到这一点,还是这是正确的方法?
香草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']); });
将代码更改为在正文的头部或末尾运行.我将你的代码分叉到头脑中运行:https://jsfiddle.net/phrhxyzL/1/,你得到了你期望的结果.