Czy istnieje jakieś narzędzie, które pozwala wyszukiwać w kodzie JS zmienne, które nie zostały zadeklarowane?
Nie do końca rozumiem, co chcesz osiągnąć.
Czy chodzi Ci o jakiś program/skrypt, który Ci przeskanuje Twój kod i "wypluje" niezadeklarowane wartości?
A może chcesz w swoich skryptach sprawdzać, czy dana zmienna istnieje?
Jeśli chodzi Ci o opcję numer 2 to zrób coś w stylu
if (typeof JakasZmienna !== 'undefined') {
// zmienna została zadeklarowana
}
else {
// zmienna bliżej nieokreślona
}
Biorąc pod uwagę, że długość nazw zmiennych w JSie jest bliżej nieograniczona, to narzędzie musiałoby zwracać listę złożoną z nieskończonej liczby elementów ;-)
a
b
c
...
aa
ab
ac
...
ba
bb
bc
...
aaa
aab
aac
...
narzędzie musiałoby zwracać listę złożoną z nieskończonej liczby elementów ;-)
Nie no. Ja to rozumiem tak, że narzędzie skanuje kod skryptu i sprawdza odwołania do zmiennych. I przy każdym takim odwołaniu weryfikuje, czy wcześniej w jakiś sposób dana zmienna została zainicjowana, czy posiada jakąś wartość, czy pojawiła się gdzieś wcześniej po lewej stronie przypisania. Ale to tylko moje domysły - fajnie, jakby OP napisał konkretnie, co miał na myśli / czego szuka.
Wydaje mi się, że zahaczamy tutaj o problem stopu :-)
Co w przypadkach w stylu window[x]
, gdzie x
zależy od np. zewnętrznego czynnika? (np. żądanie ajax)
Edit: jeśli mowa ofc. o analizie statycznej, bo w przypadku runtime sprawa jest oczywista.
No niby tak, ale z drugiej strony gdzieś to X
raczej musiało wcześniej się pojawić, w jakiś sposób została do niego przypisana jakaś wartość. Aczkolwiek mogło to być dobrze ukryte, w związku z czym człowiek analizując kod raczej załapie o co chodzi, ale maszyna niekoniecznie.
W sumie to chodziło mi o coś takiego jak w językach kompilowanych, że jak nie zadeklarujemy zmiennej (nie będzie na początku przed nią var) to "kompilator" podkreśli mi taką zmienną na czerwono.
Chodzi o to, że w innym wypadku mogę zrobić literówkę w zmiennej i nawet tego nie zauważę, bo nic mnie o tym nie informuje i oficjalnie nie jest to niedozwolone (a przynajmniej jest to dopuszczalne)...
Tak, ale języki kompilowane nie pozwalają też na bajery w stylu tworzenia zmiennych o dynamicznych nazwach:
window['a' + 'b' + 'c'] = 'Hello!';
alert(abc);
... tak że coś za coś ;-)
Co nie oznacza oczywiście, że jesteś pozostawiony bez rozwiązania - poczytaj o składni let
/ const
oraz linterach - one potrafią wyłapać większość błędów tego typu.
Inne słowo-klucz: TypeScript.
No to jest przewaga języków silnie typowanych - tam masz wprawdzie mniejszą możliwość "radosnej twórczości", ale kosztem przestrzegania pewnych wymogów, chociażby w zakresie deklarowania zmiennych.
Ale zwróć uwagę, że sam fakt napisania czegoś w stylu var Zmienna:integer;
nie gwarantuje Ci, że ona posiada jakąś wartość.
Czy istnieje jakieś narzędzie, które pozwala wyszukiwać w kodzie JS zmienne, które nie zostały zadeklarowane?
chodziło mi o coś takiego jak w językach kompilowanych, że jak nie zadeklarujemy zmiennej (nie będzie na początku przed nią var) to "kompilator" podkreśli mi taką zmienną na czerwono.
ESLint, TS compiler (działa także z JSem).
Owszem, da się takie narzędzia "oszukać", ale zwykle to świadczy o kodzie słabej jakości.
fakt napisania czegoś w stylu var Zmienna:integer; nie gwarantuje Ci, że ona posiada jakąś wartość.
W JSie/TSie taka zmienna posiada konkretną wartość - undefined