Powiel możliwe:
Is Chrome's JavaScript console lazy about evaluating arrays?Błąd w console.log?
próbuję następujący kod:
var myList = new Object();
var item = new Object();
item.text = "item-1";
myList[3] = item;
console.log(myList);
console.log(myList[3].text);
// Assign another object to the same entry
var item2 = new Object();
item2.text = "item-2";
myList[3] = item2;
console.log(myList);
console.log(myList[3].text);
Rezultatem jest dość dziwne:
* Object
* 3: Object
text: "item-2"
item-1
* Object
* 3: Object
text: "item-2"
item-2
ALE - jeśli mogę wykonać drugą część po pewnym czasie (przy użyciu setTimeout) i rozłóż pierwszy obiekt, mam rację, to znaczy:
* Object
* 3: Object
text: "item-1"
item-1
* Object
* 3: Object
text: "item-2"
item-2
uważam, że ważne jest, aby go udostępnić, ponieważ myślę, że jedną puszkę marnuje dużo czasu próbując zrozumieć, co jest nie tak w jego kodzie. A jeśli ktoś ma jakieś odniesienie do otwartego błędu lub coś podobnego - proszę odpowiedzieć na ten bilet. Dzięki!
Która wersja chrom używasz? Na jakiej platformie? Próbowałem uruchomić twój kod w mojej konsoli i otrzymałem poprawną/logiczną odpowiedź –
Jak dokładnie nazwałeś to 'setTimeout'? Próbowałem go również i uzyskałem oczekiwane rezultaty. – jsalonen
To nie jest błąd, to funkcja! Funkcja Console.log przechowuje odwołanie do zalogowanego obiektu, dzięki czemu można wyświetlić podgląd obiektu w środowisku wykonawczym. Jeśli zmieniono atrybut obiektu, to naturalnie ta zmiana jest wyświetlana również w tym podglądzie w czasie rzeczywistym. Możesz spróbować przeszukać obiekt, aby zobaczyć, że jego "hierarchia" jest nieskończenie głęboka, więc nie można go ukryć. – Kasztan