Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se Swiftu. Zároveň využij výhodnou slevovou akci až 30 % zdarma při nákupu e-learningu - více informací.
swift week + discount 30
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:2.12.2021 13:20

Narazil jsem na zajimavy bug. Konzola vypisuje fake udaje, "neplatne v dobe porizeni snimku".

  1. Mam pole List. Mam v nem 3 polozky. Vypisu ho do console.log. Tak se mi vypisi 3 polozky.
  2. Mam pole List. Mam v nem 3 polozky. Vypisu ho do console.log. pridam do pole polozku 4. Tak se mi vypisi 4 polozky.

Ale, JSON.stringify spravne vypisuje 3 polozky. Cyklus, ktery nas polem provadim ve svem programu take vypisuje 3 polozky. Ale konzola v dobe konzolovani vypisuje 4, coz je stav po dobe konzolovani.
Hrozne spatne se pak hledaji chyby, jakoze. Stravil jsem tim ted neprijemnou hodinku, nez jsem zjistil, ze blbe to pise console.log.

Zkusil jsem:

<script>
var list;
list = [1,2,3];
console.log(list);
console.log(JSON.stringify(list));
list[list.length] = 4;
/*
13:08:41.910 Array(4) [ 1, 2, 3, 4 ]
13:08:41.910 [1,2,3]
*/
</script>

Chci docílit: 13:08:41.910 Array(3) [ 1, 2, 3 ]

Uz jsem to reportoval na bugzilu. Podle mne je to hodne critical bug, pokud nekdo pouziva console.log pro ladeni.

Editováno 2.12.2021 13:22
 
Odpovědět
2.12.2021 13:20
Avatar
Martin Kašpar:2.12.2021 19:58

Z mého pohledu je to naprosto normální a známé chování vycházející z toho, jak se v JS pracuje s objekty, respektive jejich referencováním/od­kazováním. Ostatně na to odkazují i dokumentace.

Don't use console.log(obj), use console.log(JSON­.parse(JSON.strin­gify(obj))).
This way you are sure you are seeing the value of obj at the moment you log it. Otherwise, many browsers provide a live view that constantly updates as values change. This may not be what you want.

Namísto JSON.parse a JSON.stringify by mělo jít využít i spread operátor. Nicméně na vážně míněné debugování v prohlížeči bych Ti doporučil přesunout se v Dev Tools z "Console" do "Sources" a začít používat věci jako breakpointy atd.

 
Nahoru Odpovědět
2.12.2021 19:58
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:3.12.2021 8:00

No, ale, to je chybne chovani. Konzola ukazuje casove razitko a tomu by mel odpovidat obsah, ktery tam v te dobe nastal. Vzdycky to tak bylo, jen to posledni roky nekdo rozvrtal.
V tom pripade je console.log naprosto nepouzitelny prikaz a je lepsi to vypisovat pomoci aletru, jak jsem to delal do nedavna.

Nechci pouzivat ty nastroje. Ano, jiste jsou vyborne, ale slozite. Ale ani u assembleru jsem tohle nepouzival. Staci trocha nepozornosti a ukazuje ti neco jineho. Primy vypis na konzolu v miste je, co chci. Videt cele chovani kodu, ne jen v tom miste. To vetsina nastroju neumoznuje a musis mezi temi misty preklikavat. Coz je uplne naprd, kdyz chces delat nejake vetsi veci a chyba se muze objevit na nekterem z 50 mist a to jeste zdanlive nahodile.

 
Nahoru Odpovědět
3.12.2021 8:00
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:3.12.2021 12:19

Jakoze, kdybych mel takovy event-log z prihlasovani uzivatelu, tak je mi to naprd, kdyz ukazuje neco jineho, nez tam v te dobe bylo. Proc to pak pojmenovavat log?

 
Nahoru Odpovědět
3.12.2021 12:19
Avatar
Martin Kašpar:3.12.2021 13:57

To je otázkou, zda bys v tom logu vypisoval objekty nebo jiné datové typy. Uvidíme, jak dopadne bug report, jelikož obdobné chování jde vyvolat i v jiných prohlížečích.

Jak jsem psal, z mého pohledu jde o použití nevhodného nástroje. Stačí sáhnout po Sources/Debuggeru a kód si normálně odkrokovat. Pak máš vše pod kontrolou a nemusíš se odvolávat na nějaké alerty apod. Hlavně si na každém breakpointu můžeš překontrolovat stav jakékoli proměnné ve své aplikaci. Tolik asi můj názor. Víc k tomu nemám co dodat.

 
Nahoru Odpovědět
3.12.2021 13:57
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.