Список всех глобальных переменных js, используемых сайтом (не все определены!)

Каков способ перечислить все глобальные переменные, которые были использованы сайтом? Может ли любой отладчик javascript браузера сделать это? При использовании я имею в виду READ, не измененный/добавленный. Обнаруживать iframe, было бы неплохо.

ОБРАТИТЕ ВНИМАНИЕ: Мне нужно получить список глобальных переменных, "затронутых" сайтом. Не все из них или добавленные или отредактированные, те, которые использовались в любом месте сценариев сайта.

Ответ 1

В Chrome перейдите к инструментам Dev и откройте консоль. Затем введите следующее:

Object.keys( window );

Это даст вам массив всех глобальных переменных.

ИЗМЕНИТЬ

После поиска в Google немного, я нашел способ. Вам понадобится firefox и jslinter.

После настройки откройте jslinter и перейдите в Параметры- > проверить все в левом столбце , кроме "допустимых неиспользуемых параметров" .

Затем запустите jslinter на веб-странице и прокрутите вниз результаты. У вас будет список неиспользуемых переменных (глобальный, а затем локальный для каждой функции).

Теперь запустите Object.keys(window); в консоли и сравните результаты обоих, чтобы выяснить, какие из них используются.

Ответ 2

Поскольку этот вопрос является первым в google при поиске способа отображения глобальных переменных javascript, я добавлю для этого свой собственный ответ. Иногда вам нужно перечислить глобальные переменные, чтобы увидеть, нет ли в вашем коде переменной, пропущенной вне области видимости (определяется без "var" ). Для этого используйте это в консоли отладки:

(function ()
{
   var keys=Object.keys( window );
   for (var i in keys)
   {
      if (typeof window[keys[i]] != 'function')
      console.log(keys[i], window[keys[i]]);
   }
})();

Он отобразит стандартные глобальные переменные, такие как окно, документ, местоположение и т.д. Это всего лишь несколько. Таким образом, вы можете легко найти свои пропущенные вары в списке.

Ответ 3

Вы можете попытаться использовать геттеры для этого, которые вы создаете для всех существующих глобальных переменных. Запустите это до начала страницы:

Object.keys(window) // or
Object.getOwnPropertyNames(window).concat(
  Object.getOwnPropertyNames(Object.getPrototypeOf(window))
) // or whatever
.forEach(function(name) {
    var d = Object.getOwnPropertyDescriptor(window, name),
        def = Object.defineProperty,
        log = console.log.bind(console);
    if (d && !d.configurable)
        return log("cannot detect accessing of "+name);
    def(window, name, {
        configurable: true,
        get: function() {
            log("window."+name+" was used by this page!");
            if (d) {
                def(window, name, d);
                return d.get ? d.get() : d.value;
            } else { // it was not an own property
                delete window[name];
                return window[name];
            }
        },
        set: function(x) {
            log("Ugh, they're overwriting window."+name+"! Something gonna crash.");
        }
    });
});

Конечно, дескрипторы свойств и т.д. несовместимы со старыми браузерами. И обратите внимание, что существуют некоторые глобальные переменные / window свойства, которые не могут быть программно перечислимыми (например, обработчики on*), если они вам понадобятся, вам придется явно их перечислять в массиве. См. Связанные вопросы Список всех свойств объекта window? и Cross Browser Valid JavaScript Names для этого.

Тем не менее, я думаю, что использование инструмента покрытия кода, который представляет собой неподтвержденные глобальные переменные, например, предложенный @stackErro, более полезен.

Ответ 4

скопируйте и вставьте следующий код в консоль javascript.

var keys = Object.getOwnPropertyNames( window ),
    value;

for( var i = 0; i < keys.length; ++i ) {
    value = window[ keys[ i ] ];
    console.log( value );
}

все кредиты RightSaidFred (Javascript - сброс всех глобальных переменных)

Я надеюсь, что это помогло вам

Ответ 5

Простой способ перечислить ваши глобальные переменные, которые я использую иногда. Сначала поместите этот код как можно раньше, прежде чем какой-либо из ваших сценариев будет выполнен.

var WINDOW_PROPS = Object.keys(window);

Тогда в тот момент, когда вам нужно открыть свои глобальные переменные, просто выполните примерно так:

var GLOBALS = Object.keys(window)
    // filter the props which your code did not declare
    .filter(prop => WINDOW_PROPS.indexOf(prop) < 0)
    // prettify output a bit :) It up to you...
    .map(prop => `${typeof window[prop]} ${prop} ${window[prop]}`)
    // sort by types and names to find easier what you need
    .sort();

console.log(GLOBALS.join("\n"));

Я использовал некоторые функции ES6 для сокращения кода. Он все еще не подходит для производства, но достаточно хорош для целей отладки и должен работать в современных браузерах.

Ответ 6

Вы можете попробовать использовать JetBrains PhpStorm, что я делаю, вы можете получить пробную версию на 30 дней бесплатно для любой системы. Затем вы проверяете JSLint или JSHint или оба я не могу вспомнить, а затем все неиспользуемые переменные подчеркнуты, выделены разным цветом (в соответствии с темой) и видны на полосе прокрутки, и когда вы наводите на них курсор, он говорит о неиспользуемой переменной;

EDIT: Я думаю, что теперь версия сообщества бесплатна.