Как получить список задекларированных констант (const name = val) в JS?
Хочу получить список констант, объявленных через const name = val. Не могу понять это вообще возможно или нет.
Если мне нужен список переменных, тут не каких проблем:
// Условный массив всего что есть в объекте.
let winList = Object.keys(window);
let winListResult = [];
// Перебор
for (let item of winList) {
// Тут какая то проверка, не принципиально сейчас
try {
if (typeof window[item] != 'function' && typeof window[item] != 'object'){
// Тут действие допустим пишем имя в массив
winListResult.push(item);
}
} catch {}
}
console.log(winListResult)
Все, профит, у нас есть список всего что не объект и не функция.
Возможно ли провернуть тоже самое с константами? Они ведь не входят в объект globalThis.
Ответы (2 шт):
Автор решения: Qwertiy
→ Ссылка
Получить список нельзя, проверить существование конкретного имени и того, что это константа - можно.
function checkGlobal(name) {
if (name in window) {
var d = Object.getOwnPropertyDescriptor(window, name)
if (!d) {
return 'inherited'
}
return 'value' in d && d.writable && d.enumerable && !d.configurable
? 'var-like'
: 'property'
}
try {
var old = (0, eval)(name)
} catch (err) {
return 'unexisting'
}
try {
new Function(`${name} = arguments[0]`)(old)
} catch (err) {
return 'const'
}
return 'let'
}
const abc = 10
let qwe = 11
var qqq = 12
function f() {}
for (const x of ['zzz', 'abc', 'qwe', 'qqq', 'f', 'location', 'undefined', 'PERSISTENT', 'atob']) {
console.log(x, checkGlobal(x))
}
.as-console-wrapper.as-console-wrapper { max-height: 100vh }
Автор решения: Qwertiy
→ Ссылка
Если ты хочешь найти не только переменные, но и глобальные свойства, надо заменить Object.keys на Object.getOwnPropertyNames. Но обращаю внимание, что они не являются и не называются константами.
// Условный массив всего что есть в объекте.
let winList = Object.getOwnPropertyNames(window);
let winListResult = [];
// Перебор
for (let item of winList) {
// Тут какая то проверка, не принципиально сейчас
try {
if (typeof window[item] != 'function' && typeof window[item] != 'object'){
// Тут действие допустим пишем имя в массив
winListResult.push(item);
}
} catch {}
}
console.log(winListResult)