Я унаследовал проект, в котором, похоже, есть много переменных, загрязняющих глобальную сферу, и я хотел бы найти все эти. Каков наилучший способ найти введенные пользователем глобальные переменные? Я хочу исключить свойства объекта window, которые находятся там по умолчанию, и просто отфильтровать до тех, которые были введены нашим кодом. Есть ли инструмент или плагин IDE, который позволит мне легко идентифицировать их? БлагодаряЛучший способ найти глобальные переменные в Javascript
ответ
сравнить ключи в оконном объекта с ключами «пустого» окна-объекта:
(function(){
var iframe = document.createElement('iframe');
iframe.src = "about:blank";
document.body.appendChild(iframe);
var windowVars = Object.keys(iframe.contentWindow);
var globalVars = Object.keys(window).filter(key => !windowVars.includes(key));
console.log("global Vars:", globalVars);
document.body.removeChild(iframe);
})();
Теперь вам нужно найти свой код, чтобы найти строку, в которой они объявлены.
Попробуйте это ...
for(var stuff in window) {
if(window.hasOwnProperty(stuff)) console.log(stuff);
}
Это будет список все функции и переменные на странице, может быть не очень полезно, но может дать вам больше информации.
Если вы открываете инструменты Chrome dev, вы можете попробовать. Создайте переменную var life = 42
, и вы увидите ее после выполнения цикла выше.
Получение Пример окна объекта: https://jsfiddle.net/noevgh4u/
сравнение объектов, например: https://jsfiddle.net/noevgh4u/1/
Самый практичный способ, которым я мог думать о том, чтобы открыть пустую страницу в браузере вашего выбора, выписывать объект, основанный на этих свойствах окна.
document.body.append("var obj = {");
for(prop of Object.keys(window)) {
document.body.append(prop +": null");
};
document.body.append("}");
В примере скопируйте этот объект из текста на странице.
Вставьте его в приложение, которое вы проверяете для глобальных переменных.
Создать новый объект с помощью
var newObj;
for(prop of Object.keys(window)) {
newObj[prop] = null;
};
так, что в приложении, которое теперь Obj, содержащих пустые ключи окна и newObj, содержащие ваши приложения ключи.
Затем сравните два с помощью такого способа, как Deep comparison of objects/arrays
или что-то вроде:
function filterKeys(a, b) {
var firstKeys = Object.keys(a);
var secondKeys = Object.keys(b);
var missingKeys = firstKeys.filter(val => !secondKeys.includes(val));
return missingKeys;
}
var createdVarsAndFuncs = filterKeys(obj, newobj);
Я создал пример этого в jsFiddle https://jsfiddle.net/noevgh4u/1/
- 1. Способ сделать глобальные частные переменные в javascript?
- 2. Глобальные переменные в javascript
- 3. html5 javascript, глобальные переменные
- 4. Лучший способ ввода форм ввода в глобальные переменные?
- 5. Лучший способ создать глобальные переменные режима боя в Objective-C
- 6. Лучший способ сохранить глобальные переменные в приложении для iPhone
- 7. JavaScript глобальные переменные видимости
- 8. Javascript: защитите глобальные переменные
- 9. Javascript Глобальные переменные
- 10. неопределенные глобальные переменные javascript
- 11. Javascript Глобальные переменные сбрасываются
- 12. Javascript назначая глобальные переменные
- 13. Производительность JavaScript - глобальные переменные
- 14. Глобальные переменные, Javascript
- 15. Глобальные переменные Javascript в Webkit
- 16. Javascript локальные переменные в глобальные переменные
- 17. Глобальные переменные в Javascript и ESLint
- 18. Глобальные глобальные переменные Django
- 19. Глобальные переменные в JQuery
- 20. Глобальные переменные или переменные объекта Javascript
- 21. Какой обычный способ аннотировать глобальные переменные в Javascript?
- 22. JavaScript и ES6, «глобальные» переменные
- 23. Javascript Глобальные переменные не инициализируются
- 24. javascript глобальные переменные - область функций?
- 25. Когда глобальные переменные javascript перезагружаются?
- 26. Закрытие Javascript и глобальные переменные
- 27. Глобальные переменные, функции и Javascript
- 28. Глобальные переменные JavaScript, не обновляемые
- 29. Javascript Глобальные переменные не работают
- 30. Глобальные и локальные переменные JavaScript
Я думаю, что jslint предупреждает о переменных, которые не объявлены локальными. Он может создавать ложные срабатывания для стандартных свойств окна, но их не должно быть сложно пропустить. – Barmar
Вот пара сообщений на SO [post1] (http://stackoverflow.com/questions/17276206/list-all-js-global-variables-used-by-site-not-all-defined) [post2] (http://stackoverflow.com/questions/8369338/javascript-dumping-all-global-variables) –