Chrome / Firefox console.log fügt immer eine Zeile mit der Aufschrift "undefiniert" an.

77

Bei jeder console.logAusführung wird eine Zeile mit der Aufschrift undefinedan das Ausgabeprotokoll angehängt.

Dies geschieht sowohl in Firefox als auch in Chrome unter Windows und Linux.

N. Chamaa
quelle
5
Was ist deine Frage? Könnten Sie einen Beispielcode zeigen, der dies erzeugt? Was ist das Verhalten, das Sie erwarten?
Kapa
Das ist wahrscheinlich nicht genug Informationen, um Ihr Problem zu lösen
Titouan de Bailleul
1
Ich habe mein Bestes gegeben, obwohl es tatsächlich einige Informationen fehlt :)
talkol
2
console.log()kehrt zurück undefined.
Rocket Hazmat
Mein Problem war, dass ich nur die Fehler und Warnungen anzeigte und die Nachrichten und Informationen anzeigte , die für mich funktionierten.
Leo

Antworten:

97

Wenn Sie mit console.log()einer JS-Datei arbeiten, sollte diese undefinedZeile nicht angehängt werden.

Wenn Sie console.log()von der Konsole aus laufen , ist dies sinnvoll. Dies ist der Grund: In der Konsole können Sie einen Namen für eine Variable eingeben (z. B. versuchen Sie es mit der Eingabe window), und es werden Informationen darüber gedruckt. Wenn Sie eine void-Funktion (wie console.log) über die Konsole ausführen, werden undefinedin diesem Fall auch Informationen zum Rückgabewert ausgedruckt .

Ich habe beide Fälle auf meinem Chrome (Mac Version 23.0.1271.101) getestet und sehe die undefinedZeile tatsächlich , wenn ich sie in der Konsole ausführe. Dies undefinederscheint auch, wenn ich diese Zeile in die Konsole schreibe:var bla = "sdfdfs"

talkol
quelle
Vielen Dank für Ihre Antwort. Ich starte es von der Konsole aus. Ich habe versucht, alle Erweiterungen zu stoppen, aber ich erhalte das gleiche Ergebnis.
N. Chamaa
3
Nun, das ist das erwartete Verhalten. Alles funktioniert wie es sollte. Sie können Ihre Erweiterungen wieder aktivieren :) Führen Sie einfach console.log aus einer JS-Datei aus, und Sie werden dies nicht sehen. Warum führen Sie console.log überhaupt von der Konsole aus aus? Sie können einfach einen beliebigen Variablennamen ohne console.log eingeben
talkol
aber es war nicht vorher, deshalb !!
N. Chamaa
Vielleicht wurde Ihr Chrome aktualisiert und dieses Verhalten begann in neueren Versionen. Da das gleiche in meinem Chrome (auf Mac) passiert, bezweifle ich sehr, dass es ein Problem ist.
talkol
39

Obwohl die Antwort von talkol in Ordnung ist, versuche ich es klarer auszudrücken:

JavaScript ist als dynamische Sprache konzipiert, was bedeutet, dass der Typ (Zeichenfolge, Leere, Boolescher Wert…) eines Funktionsrückgabewerts nicht vordefiniert ist. Wenn eine Funktion keine return-Anweisung oder eine leere return-Anweisung ohne Wert verwendet, gibt JavaScript automatisch undefiniert zurück. Das bedeutet, dass in JavaScript jede Funktion etwas zurückgibt, zumindest undefiniert.

Daher verwendet die Funktion console.log()in der Chrome-Konsole entweder no oder eine leere return-Anweisung, sodass der Rückgabewert dieser Funktion nicht definiert ist. Dieser Funktionsrückgabewert wird auch in der Chrome-Konsole angezeigt.

[Wenn jemand weiß, wo die Definition der console.log()Funktion im Google Chrome-Quellcode zu finden ist, kommentieren Sie dies bitte mit dem Link. Dann können wir sogar noch weiter gehen und uns den tatsächlichen Code ansehen. Das wäre schön.]

Quellen:

Paul Vincent Beigang
quelle
Das Verweisen auf andere Beiträge ist in Ordnung, aber dies ist keine vollständige Antwort, sodass es besser als Kommentar zu der Antwort passt, auf die Sie verweisen.
Dan
5
Ich habe versucht, dies zu tun, kann aber aufgrund mangelnder Reputation keine Kommentare abgeben ("Sie müssen 50 Reputationen haben, um Kommentare abzugeben"). Daher dachte ich, es wäre besser, die "unoptimale" Art der Beantwortung zu verwenden, anstatt zu kommentieren Buchung.
Paul Vincent Beigang
Das ist fair. Ich kann meine Ablehnung nicht entfernen, ohne dass Sie den Beitrag bearbeiten. Möchten Sie näher darauf eingehen, was sich unter diesem Link in der Antwort befindet? Wenn Sie das können, dann kann ich meine Stimme ändern :)
Dan
14

Folgen Sie dem Bild, um dieses Problem zu lösen:

Ctrl + Shift + J

Philippe Piheyns
quelle
Firefox oder Chrome?
Peter Mortensen
Was ist das Wesentliche? Warnungen ausschalten?
Peter Mortensen
5

Die Konsolenumgebung in Ihrem Browser verwendet den allerletzten Anweisungsausdruck in einem Programm, wertet ihn auf einen Wert aus und zeigt Ihnen diesen Wert an.

Das Ergebnis eines Zuweisungsausdrucks ist der zugewiesene Wert. Die JavaScript-Engine führt also nur eine Zuweisung aus, aber die Konsole führt einen zusätzlichen Schritt aus, bei dem festgelegt wird, was auch immer meine letzte Anweisung ist. Geben Sie diesen Wert zurück. Deshalb wird 2 gedruckt:

Hier.

In Anweisungen, die keinen Rückgabewert haben, erhalten Sie so etwas wie undefiniert.

Mahvash Fatima
quelle
Vielleicht ein bisschen abseits des Themas, aber warum gibt a=2return 2 und var b=2nichts zurück? (Ich denke, weil =ein Operator einen Wert zurückgibt, aber warum macht er das nicht auch in der Deklarationsanweisung?)
Floatingpurr
1

Was Sie tun können, ist einfach eine eigene console.log-ähnliche Funktion zu erstellen, mit der Sie dieses Verhalten ändern können, wenn Sie viel in der Entwicklerkonsole codieren. Hier ist ein Beispiel dafür, wie das in der Entwicklerkonsole aussieht:

console.log('I hate seeing the next line stating the obvious.')
I hate seeing the next line stating the obvious.
undefined
log = function(l){return l}
function log()
if(1 === 2){console.log('1 is not equal to 2.')}else{log('No Shit Sherlock.')}
"No Shit Sherlock."
Skeptiker
quelle
0

undefinedist der Rückgabewert von console.log () in Chrome-Entwicklertools. Sie werden undefiniert, wenn Sie in den Chrome-Entwicklertools die folgenden Schritte ausführen, und Sie werden feststellen, dass Sie undefiniert werden, obwohl x den Wert 3 hat.

> let x = 3
> undefined
Yigit Alparslan
quelle
-3

Wenn Sie console.logmehrere Werte in einer Zeile ausgeben, ist hier eine hackige Alternative:

var1 + ' ' + var2 + ' ' + var...

(Bessere Ideen sind willkommen, dies kann unter bestimmten Umständen explodieren.)

i336_
quelle