Ich glaube, dieser Tweet könnte mein beliebteste Tweet aller Zeiten sein, aber ich bin mir nicht sicher, wie ich das heutzutage überprüfen kann. Ich werde diesen kleinen Trick hier wiederholen, weil Bloggen cool und lustig ist.
Das habe ich früher oft beim Debuggen von JavaScript gemacht
console.log("myVariable: ", myVariable);
Aber jetzt mache ich das, weil es einfach schneller zu tippen ist
console.log({ myVariable });
Und man verpasst nichts in den DevTools

Da dies jetzt ein Blogbeitrag ist, kann ich ein wenig weiter ausholen...
Die dort angezeigte Ausgabe (und eigentlich `console.log` selbst) ist eine Sache der DevTools, aber die Syntax nicht. Indem ich geschweifte Klammern in JavaScript verwende, erstelle ich ein Objekt. Ich muss kein Objekt zuweisen, es kann einfach *sein*.
{
foo: "bar"
}
Das sieht man oft, wenn man ein Objekt an eine Funktion übergibt, wie `myFunction({ config: options });`. Der „Trick“ ist, dass man beim Erstellen eines Objekts die Kurzschreibweise verwenden kann, indem man *nur* eine Variable angibt, was sie impliziert. Also so
const fruit = "apple";
// Shorthand
let x = {
fruit
}
console.log(x);
// Normal way, literally the same exact thing
x = {
"fruit": fruit
}
console.log(x); // identical
Wenn Sie eine Variable haben und diese wie `console.log({ myVariable });` protokollieren, verwenden Sie diese Kurzschreibweise für die Objekterstellung und sie wird wie das Objekt protokolliert, zu dem sie wird.
Ein Nachteil dieser Idee ist, dass die DevTools manchmal wählen, sie als ▶ Objekt auszugeben und Sie klicken müssen, um den Wert zu sehen. Ich kenne die Heuristik nicht, wann sie das tut und wann nicht. Wenn Ihnen das nicht gefällt oder das Ausgabeformat eines Objekts im Allgemeinen, bevorzugen Sie vielleicht das Format `console.table({ myVariable });`

Cleverer Tipp, aber noch schneller ist es, Snippets in Ihrem Texteditor für gängige Dinge wie diese hinzuzufügen. In Sublime Text ordne ich `l;` `console.info('${1}', ${2:$1});` zu. Dann kann ich einfach `l;<tab>someVarName` tippen und es erweitert sich mit dem Variablennamen, der an beiden Stellen ausgefüllt ist.
Das Gleiche funktioniert in VS Code, aber Sie müssen einige Einstellungen ändern, damit es sofort bei . erweitert wird.
Ausgezeichnet!
Das passiert normalerweise, wenn die Dev Tools geschlossen sind, wenn der Wert ausgegeben wird.
Wertschätzung! Danke für die Erleuchtung!
Es gibt einen Haken an der Sache. Wenn Sie das ▶ Objekt erweitern, sehen Sie den aktuellen Wert, nicht den Wert, wie er war, als `console.log` ausgeführt wurde. Nehmen Sie dieses Beispiel
Wenn Sie die Konsole öffnen und ▶ Objekt erweitern, sehen Sie `{example: {foo: "second"}}` und nicht `{example: {foo: "one"}}`. Ich weiß, dass dies passieren kann, unabhängig davon, ob Sie den im Blogbeitrag erklärten Trick verwenden oder nicht, aber ich dachte, es wäre erwähnenswert.
Mein erstes Js-Debugging war alert( myvariable ); und es war ziemlich nervig.
Hallo Chris,
Danke für diesen tollen Trick.
Ich bin kein großer Fan von geschweiften Klammern in JS, aber die Funktion console.table() hat meine Aufmerksamkeit erregt.
Es sieht in der Konsole cool aus. Ich denke auch darüber nach, diesen Trick in einem meiner letzten Blogbeiträge über JS zu verbessern/umzusetzen: https://letstacle.com/javascript-hello-world-example-step-by-step-explained-code
Ihr Feedback wird für mich wertvoll sein. Schauen Sie gerne vorbei.
Machen Sie weiter so.
Das ist ein cooler Trick, aber achten Sie darauf – das von Ihnen erstellte Objekt ist lebendig und geht in manchen Situationen möglicherweise nicht in den Garbage Collector über.
Danke Chris! Das ist ein guter!
Ich benutze `debugger;` immer noch oft in meinem Code – oder ist das kein Thema mehr?! Dann kann ich durch den gestoppten Codezustand klicken und interessante Dinge herausfinden.
Das ist eine großartige Idee!!!
Als ich den Titel dieses Beitrags zum ersten Mal sah, wusste ich bereits, worum es gehen würde, aber ich fragte mich, wie dieser Trick nicht früher auf meine Gedanken kam, da ich das Konzept dahinter kenne und nach einem Weg suchte, dies zu tun!
Danke für diese Idee!
Ich liebe es, wenn Leute solches Wissen teilen und ich liebe es besonders, wenn Leute ihre TIL-Referenzen teilen. Dennoch fühlen sich der Tweet und der Beitrag aus einem nicht-technischen Grund etwas seltsam an: Diese Idee gewann durch einige andere Tweets zuvor an Fahrt und Chris veröffentlichte sie sehr kurz danach, ohne eine Referenz zurückzugeben, die besagt: "Hey, ich habe das bei @whatever gesehen und fand es die beste Idee aller Zeiten, also teile ich sie" oder "Mein Freund hat mir gerade erzählt, dass er das bei @whatever gelesen hat".
In unserem Bereich ist es wichtig, Referenzen/Ideen von anderen anzuerkennen, weshalb ich die Art und Weise, wie sie auf Chris' Account populär wurde, nicht ganz befürworte, da es sich anfühlte, als würde er vergessen, woher er den einfachen, aber cleveren „Trick“ hat. Meiner Meinung nach.
(und nein, ich rede nicht von mir, nur um das klarzustellen)
Danke fürs Teilen.
Ich habe den Trick von einer Paarungs-Session mit einem Kollegen bekommen. Wenn es einen Zufall gab, der den Eindruck erweckte, ich hätte die Idee von einem anderen Tweet „gestohlen“, dann tut es mir leid, aber das habe ich nicht. Diese Technik basiert auf etwas, das es in JavaScript schon seit ungefähr einem halben Jahrzehnt gibt.
Das hat mich inspiriert, Folgendes zu erstellen
Und es so aufrufen
Und alles wird schön formatiert :)
Ein noch schnellerer Weg, dies zu tun, ist die Nutzung der Funktionalität, die Ihre IDE bieten sollte.
Zum Beispiel habe ich in PyCharm/Webstorm eine Live-Vorlage eingerichtet, die es mir ermöglicht, `clv` einzugeben, auf `Tab` zu drücken und dann den Namen meiner Variable einzugeben, und es fügt automatisch `console.log('foo', foo)` ein.
Wenn ich Entwicklern beibringe, sind sie immer überrascht, wenn sie von all den Programmierhilfen erfahren, die sie in ihrer IDE-Wahl bisher nicht genutzt haben.
Eine Sache, die mich frustriert, ist, wenn man etwas auf einer Zeile zusammen mit dem Objekt ausgeben möchte, wie zum Beispiel
console.log(
**** Debug_jwir3: inside some function: ${object));In diesem Fall wird `object` nicht erweitert (nur in einen String umgewandelt), es sei denn, ich führe ein separates `console.log` nur mit der Variable durch.
Verwenden Sie Kommas anstelle von String-Verkettung, wie zum Beispiel
console.log("****Debug_jwir3: inside some function:", object);Und es wird in der gleichen Debug-Ausgabe wie eine eigenständige Ausgabe gerendert.
Warum nicht console.log(
myVariable:${myVariable});Nicht sehr kurz, schätze ich..
Ich schätze, Sie bräuchten dort Backticks, damit das funktioniert. Und ja, der Punkt ist, denke ich, die Kürze.
Hey,
Ich lerne gerade JavaScript und bin auf diesen Blogbeitrag gestoßen. Sehr aufschlussreich! Und hilfreich, weil ich beim Lernen jede Zeile mit console.log ausgeben muss. Dieser Trick hilft mir, leichter zu unterscheiden, welche Ausgabe von welcher Variable stammt.
Als ich es jedoch in Kombination mit einem Array versuchte, geriet ich ein wenig in Schwierigkeiten. Es schien nicht zu funktionieren?
Gibt es Gedanken dazu, was ich hier falsch gemacht habe
const colors = ["groen", "geel", "rood", "paars", "blauw", "oranje"];console.log(colors[4]);
console.log(colors[1]);