Jak Mogę zmienić domyślne zachowanie konsoli.Zaloguj się Safari?
W Safari bez dodatków, console.log
wyświetli obiekt w ostatnim stanie wykonania, a nie w stanie, w którym wywołano console.log
.
Muszę sklonować obiekt tylko po to, aby wyprowadzić go przez console.log
, Aby uzyskać stan obiektu w tej linii.
Przykład:
var test = {a: true}
console.log(test); // {a: false}
test.a = false;
console.log(test); // {a: false}
11 answers
Myślę, że szukasz console.dir()
.
console.log()
nie robi tego, co chcesz, ponieważ drukuje odniesienie do obiektu, a gdy go otworzysz, zmienia się. console.dir
wypisuje katalog właściwości obiektu w momencie jego wywołania.
Poniższy pomysł JSON jest dobry; możesz nawet przejść do analizy ciągu JSON i uzyskać obiekt do przeglądania, taki jak Jaki.dir () daje:
console.log(JSON.parse(JSON.stringify(obj)));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-07 22:01:36
To, co zwykle robię, jeśli chcę zobaczyć jego stan w czasie, gdy był rejestrowany, to po prostu konwertuję go na ciąg JSON.
console.log(JSON.stringify(a));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-12 14:10:54
Vanilla JS:
console.log(JSON.parse(JSON.stringify(test)));
JQuery specyficzne rozwiązanie:
Można utworzyć migawkę obiektu w określonym momencie za pomocą jQuery.extend
console.log($.extend({}, test));
To, co się tutaj dzieje, to jQuery tworzy nowy obiekt z zawartością obiektu test
i zapisuje to (aby nie uległo zmianie).
AngularJS (1) rozwiązanie:
Angular zapewnia copy
funkcję, która może być używana do tego samego efektu: angular.copy
console.log(angular.copy(test));
Vanilla js wrapper funkcja:
Oto funkcja, która zawija console.log
, ale zrobi kopię 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 będzie nie próbować kopiować rzeczy, jeśli nie są one regularnymi obiektów.
function consoleLogWithObjectCopy () {
var args = [].slice.call(arguments);
var argsWithObjectCopies = args.map(copyIfRegularObject)
return console.log.apply(console, argsWithObjectCopies)
}
function copyIfRegularObject (o) {
const isRegularObject = typeof o === 'object' && !(o instanceof RegExp)
return isRegularObject ? copyObject(o) : o
}
function copyObject (o) {
return JSON.parse(JSON.stringify(o))
}
Przykładowe użycie: consoleLogWithObjectCopy('obj', {foo: 'bar'}, 1, /abc/, {a: 1})
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-21 14:10:16
To > Object
w konsoli, nie tylko pokazuje aktualny stan. W rzeczywistości odkłada odczyt obiektu i jego właściwości, dopóki go nie rozszerzysz.
Na przykład,
var test = {a: true}
console.log(test);
setTimeout(function () {
test.a = false;
console.log(test);
}, 4000);
Następnie rozwiń pierwsze wywołanie, będzie poprawne, jeśli zrobisz to przed drugim console.log
zwróci
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-12 14:08:27
Używając podpowiedzi Xeon06, możesz parsować jego JSON w obiekcie, A oto funkcja dziennika, której teraz używam do zrzucania moich obiektów:
function odump(o){
console.log($.parseJSON(JSON.stringify(o)));
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-29 19:41:41
Zdefiniowałem użyteczność:
function MyLog(text) {
console.log(JSON.stringify(text));
}
A jak chcę się zalogować na konsolę to po prostu robię:
MyLog("hello console!");
To działa bardzo dobrze!Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-02 22:04:34
Możesz chcieć zalogować obiekt w sposób czytelny dla człowieka:
console.log(JSON.stringify(myObject, null, 2));
To wcięło obiekt z 2 spacjami na każdym poziomie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:14
Istnieje możliwość użycia biblioteki debuggera.
Wystarczy umieścić skrypt na swojej stronie internetowej i umieścić instrukcje dziennika.
<script src="debug.js"></script>
Logowanie
var test = {a: true}
log(test); // {a: true}
test.a = false;
log(test); // {a: false}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-08 15:25:52
Mogę zostać postrzelony za sugerowanie tego, ale to można zrobić krok dalej. Możemy bezpośrednio rozszerzyć sam obiekt konsoli, aby uczynić go bardziej przejrzystym.
console.logObject = function(o) {
(JSON.stringify(o));
}
Nie wiem, czy spowoduje to jakiś rodzaj kolizji/rozpadu nuklearnego/rip w kontinuum czasoprzestrzeni. Ale to działa pięknie w moich testach qUnit. :)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-21 21:31:37
Po prostu odśwież stronę po otwarciu konsoli lub otwórz konsolę przed wysłaniem żądania na stronę docelową....
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-15 10:42:17
Po prostu wydrukuj cały obiekt na konsoli.
console.dir(object);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-06 10:53:37