2015-12-28 8 views
0

Мне нужно передать список имен переменных в JavaScript и проверить, существуют ли эти переменные. Я попытался следующие, но это, кажется, не будет делать трюк (JSFiddle here):Как проверить динамические глобальные переменные без использования `window` в JavaScript?

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']); 

Я пытаюсь получить результирующие предупреждения:

  1. переменной test1 определяется.
  2. Определяется переменная test2.
  3. Переменная test3 не определена.

Похоже, что это можно исправить, используя трюк ниже, но есть ли другой способ достичь этого? Является ли объявить глобальные переменные под window единственным способом, чтобы отслеживать их? `

window.test1 = 'test1'; 
window.test2 = 'test2'; 

Существуют ли более эффективные способы сделать это, или это правильный подход?

Vanilla JS отвечает только на них.

+1

Почему используется 'window.varname' трюк? Глобальные переменные определяются на объекте окна. –

+0

Что вы пытаетесь сделать точно? – epascarello

+0

@JackZelig Тогда почему это не работает без явного объявления переменной в окно? –

ответ

5

Это не работает, потому что переменные не находятся в глобальной области видимости, они входят в область действия window.onload.

enter image description here

Ваш код на самом деле работает так:

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/, и вы получите ожидаемые результаты.

Смежные вопросы