Wykrywanie czy jest jakaś zmienna niezadeklarowana

0

Czy istnieje jakieś narzędzie, które pozwala wyszukiwać w kodzie JS zmienne, które nie zostały zadeklarowane?

0

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
}

1

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
...
0

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.

0

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.

0

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.

0

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)...

1

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.

0

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ść.

1

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1