Получение всех (javascript) глобальных переменных на странице
Есть ли способ получить имена/значения всех глобальных переменных на странице?
Я хотел бы написать функцию javascript, чтобы сделать следующее:
- Найти все глобальные переменные с префиксом "xxx_" и привязать их к массиву (например,).
- постройте строку запроса, используя пары значений имени следующим образом:
xxx_glob_var1 = value1 & xxx_glob_var2 = value2 и т.д.
Как это сделать?
Ответы
Ответ 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 - мои фактические глобальные переменные.
Я только что увидел, что существует аналогичный ответ на другой вопрос.