Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.
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
Neaktivní uživatel: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
Neaktivní uživatelský účet
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
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
Neaktivní uživatel: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
Neaktivní uživatelský účet
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.