W Safari bez dodatków (a właściwie w większości innych przeglądarek), console.log
pokaże obiekt w ostatnim stanie wykonania, a nie w stanie, w którym console.log
został wywołany.
Muszę sklonować obiekt tylko po to, aby go wyprowadzić, console.log
aby uzyskać stan obiektu w tym wierszu.
Przykład:
var test = {a: true}
console.log(test); // {a: false}
test.a = false;
console.log(test); // {a: false}
Odpowiedzi:
Myślę, że szukasz
console.dir()
.console.log()
nie robi tego, co chcesz, ponieważ drukuje odniesienie do obiektu, a gdy go otwierasz, jest zmieniane.console.dir
drukuje katalog właściwości obiektu w momencie jego wywołania.Poniższy pomysł na JSON jest dobry; możesz nawet przeanalizować ciąg JSON i uzyskać obiekt, który można przeglądać, taki jak dir ():
console.log(JSON.parse(JSON.stringify(obj)));
źródło
console.log
aconsole.dir
console.dir
nie działa w Chrome (v33). Oto porównanie rozwiązań, które zaoferowali ludzie: jsfiddle.net/luken/M6295To, co zwykle robię, jeśli chcę zobaczyć jego stan w momencie, gdy został zarejestrowany, to po prostu przekonwertować go na ciąg JSON.
źródło
function odump(o){ console.log($.parseJSON(JSON.stringify(o))); }
Vanilla JS:
Odpowiedź @ evan wydaje się tutaj najlepsza. Po prostu (ab) użyj JSON.parse / stringify, aby efektywnie skopiować obiekt.
Rozwiązanie specyficzne dla JQuery:
Możesz utworzyć migawkę obiektu w określonym momencie za pomocą
jQuery.extend
To, co się tutaj właściwie dzieje, to to, że jQuery tworzy nowy obiekt z zawartością
test
obiektu i rejestruje go (więc nie zmieni się).Specyficzne rozwiązanie AngularJS (1):
Angular udostępnia
copy
funkcję, której można użyć do tego samego efektu:angular.copy
Funkcja wrappera Vanilla JS:
Oto funkcja, która zawija,
console.log
ale tworzy kopię dowolnych obiektów przed ich wylogowaniem.Napisałem to w odpowiedzi na kilka podobnych, ale mniej solidnych funkcji w odpowiedziach. Obsługuje wiele argumentów i nie będzie próbować kopiować rzeczy, jeśli nie są one zwykłymi obiektami.
przykład użycia :
consoleLogWithObjectCopy('obj', {foo: 'bar'}, 1, /abc/, {a: 1})
źródło
To
> Object
w konsoli nie tylko pokazuje aktualny stan. W rzeczywistości odkłada odczytanie obiektu i jego właściwości, dopóki go nie rozwiniesz.Na przykład,
Następnie rozwiń pierwsze wywołanie, będzie poprawne, jeśli zrobisz to przed
console.log
powrotem drugiegoźródło
używając wskazówki Xeon06, możesz przeanalizować jego JSON w obiekcie, a oto funkcja dziennika, której teraz używam do zrzucania moich obiektów:
źródło
Zdefiniowałem narzędzie:
a kiedy chcę się zalogować do konsoli, po prostu robię:
Pracuje bardzo dobrze!
źródło
Możesz zarejestrować obiekt w sposób czytelny dla człowieka:
Powoduje to wcięcie obiektu za pomocą 2 spacji na każdym poziomie.
Jak mogę ładnie wydrukować JSON za pomocą JavaScript?
źródło
Istnieje możliwość użycia biblioteki debuggera.
https://debugjs.net/
Po prostu umieść skrypt na swojej stronie internetowej i umieść instrukcje dziennika.
Logowanie
źródło
Mogę zostać zastrzelony za zasugerowanie tego, ale można pójść o krok dalej. Możemy bezpośrednio rozszerzyć sam obiekt konsoli, aby był bardziej przejrzysty.
Nie wiem, czy to spowoduje jakiś rodzaj kolizji biblioteki / rozpadu jądrowego / rozerwania w kontinuum czasoprzestrzeni. Ale działa pięknie w moich testach qUnit. :)
źródło
Po prostu odśwież stronę po otwarciu konsoli lub otwórz konsolę przed przesłaniem żądania do strony docelowej ....
źródło
Po prostu wydrukuj cały obiekt na konsoli.
źródło