Dzięki za komentarz, tec. Udało mi się znaleźć istniejący niepotwierdzony błąd Webkita, który wyjaśnia ten problem: https://bugs.webkit.org/show_bug.cgi?id=35801 (EDYCJA: teraz naprawiona!)
Wydaje się, że trwa dyskusja na temat tego, jak bardzo jest to błąd i czy można go naprawić. Wydaje mi się, że to złe zachowanie. Było to dla mnie szczególnie niepokojące, ponieważ przynajmniej w Chrome występuje, gdy kod znajduje się w skryptach, które są wykonywane natychmiast (przed załadowaniem strony), nawet gdy konsola jest otwarta, za każdym razem, gdy strona jest odświeżana. Wywołanie polecenia console.log, gdy konsola nie jest jeszcze aktywna, powoduje jedynie odniesienie do obiektu znajdującego się w kolejce, a nie wyjście, które będzie zawierać konsola. Dlatego tablica (lub dowolny obiekt) nie będzie oceniana, dopóki konsola nie będzie gotowa. To naprawdę jest przypadek leniwej oceny.
Istnieje jednak prosty sposób, aby tego uniknąć w kodzie:
var s = ["hi"];
console.log(s.toString());
s[0] = "bye";
console.log(s.toString());
Wywołując toString, tworzysz reprezentację w pamięci, która nie zostanie zmieniona przez następujące instrukcje, które konsola odczyta, gdy będzie gotowa. Wynik konsoli różni się nieco od bezpośredniego przekazywania obiektu, ale wydaje się akceptowalny:
hi
bye