Подтвердить что ты не робот

Получение всех (javascript) глобальных переменных на странице

Есть ли способ получить имена/значения всех глобальных переменных на странице?

Я хотел бы написать функцию javascript, чтобы сделать следующее:

  • Найти все глобальные переменные с префиксом "xxx_" и привязать их к массиву (например,).
  • постройте строку запроса, используя пары значений имени следующим образом: xxx_glob_var1 = value1 & xxx_glob_var2 = value2 и т.д.

Как это сделать?

4b9b3361

Ответ 1

Что-то вроде этого:

function getGlobalProperties(prefix) {
  var keyValues = [], global = window; // window for browser environments
  for (var prop in global) {
    if (prop.indexOf(prefix) == 0) // check the prefix
      keyValues.push(prop + "=" + global[prop]);
  }
  return keyValues.join('&'); // build the string
}

Использование теста:

var xxx_foo = "foo";
xxx_bar = "bar";
window.xxx_baz = "baz";

var test = getGlobalProperties('xxx_');
// test contains "xxx_baz=baz&xxx_bar=bar&xxx_foo=foo"

Ответ 2

Или вы можете просто запустить;

Object.keys(window);

Он покажет несколько дополнительных глобалов (~ 5), но гораздо меньше, чем ответ for (var i in window).

Ответ 3

В некоторых случаях вам может понадобиться найти < перечисляемые свойства; поэтому for..in не будет работать (spec, о chrome), и не будет Object.keys, поскольку оба используют только перечислимые ключи, Обратите внимание, что for..in отличается от in, но мы не можем использовать это для итерации.

Вот решение, использующее Object.getOwnPropertyNames (совместимость - IE9 +). Я также добавил поддержку, когда вы хотите только перечислимые свойства, или если вы хотите искать другой в контексте (не глобальный).

function findPrefixed(prefix, context, enumerableOnly) {
    var i = prefix.length;
    context = context || window;
    if (enumerableOnly) return Object.keys(context).filter( function (e) {return e.slice(0,i) === prefix;} );
    else return Object.getOwnPropertyNames(context).filter( function (e) {return e.slice(0,i) === prefix;} );
}
findPrefixed('webkit');
// ["webkitAudioContext", "webkitRTCPeerConnection", "webkitMediaStream", etc..

Затем, если вы хотите присоединиться, например.

findPrefixed('webkit').map(function (e) {return e+'='+window[e];}).join('&');
// "webkitAudioContext=function AudioContext() { [native code] }&webkitRTCPeerConnection=function RTCPeerConnection() etc..

Ответ 4

Вы можете сделать что-то вроде этого:

for (var i in window) {
    // i is the variable name
    // window[i] is the value of the variable
}

Хотя при этом вы получите кучу дополнительных свойств DOM, прикрепленных к окну.

Ответ 5

В моем случае два верхних ответа не сработали, поэтому я добавляю еще один ответ, чтобы выделить комментарий Дэна Даскалеску:

Object.keys(window);

Когда я его выполнил, он дал:

сверху, расположение, документ, окно, внешний, хром, $, JQuery, matchMedia, jQuery1113010234049730934203, match_exists, player_exists, add_me, isLetter, create_match, delete_me, ожидая, не зная, обновить, delete_match, Функция JsFunction, проверьте, set_global, autoheight, updateTextbox, update_match, update_player, alertify, swal, sweetAlert, save_match, $тела, value_or_null, игрок, позиция, умение, obj_need_save, xxx_saves, previousActiveElement

где игрок, positon, способность, obj_need_save, xx_saves - мои фактические глобальные переменные.


Я только что увидел, что существует аналогичный ответ на другой вопрос.