web-dev-qa-db-fra.com

Chrome / Firefox console.log ajoute toujours une ligne indiquant undefined

À chaque fois console.log est exécuté, une ligne indiquant undefined est ajoutée au journal de sortie.

Se produit à la fois dans Firefox et Chrome sous Windows et Linux.

63
N. Chamaa

Si vous exécutez console.log() à partir d'un fichier JS, cette ligne undefined ne doit pas être ajoutée.

Si vous exécutez console.log() à partir de la console elle-même, cela a du sens. C'est pourquoi: Dans la console, vous pouvez taper un nom de variable (par exemple essayez de taper window) et il affiche des informations à ce sujet. Lorsque vous exécutez une fonction void (comme console.log) à partir de la console, elle affiche également des informations sur la valeur de retour, undefined dans ce cas.

J'ai testé les deux cas sur mon Chrome (Mac ver 23.0.1271.101) et en effet je vois la ligne undefined quand je l'exécute à l'intérieur de la console. Ce undefined apparaît également lorsque j'écris cette ligne dans la console: var bla = "sdfdfs"

80
talkol

Bien que la réponse de talkol soit correcte, j'essaie de le dire plus clairement:

JavaScript est conçu comme un langage dynamique ce qui signifie que le type (chaîne, vide, booléen…) d'une valeur de retour de fonction n'est pas prédéfini. Si une fonction n'utilise pas une instruction de retour ou une instruction de retour vide sans valeur, JavaScript renvoie automatiquement undefined. Cela signifie qu'en JavaScript, chaque fonction renvoie quelque chose, au moins indéfini.

Ainsi, la fonction console.log() dans Chrome utilise non ou une instruction de retour vide, de sorte que la valeur de retour de cette fonction n'est pas définie. Cette valeur de retour de fonction est également affichée dans la console Chrome.

[Si quelqu'un sait où trouver la définition de la fonction console.log() dans Google Chrome code source, veuillez commenter avec le lien, alors nous pouvons même aller plus loin et regarder le le vrai code, ce serait bien.]

Sources:

37
Paul Vincent Beigang

Suivez l'image pour résoudre ce problème:

Ctrl + Shift + J

6
Philippe Piheyns

L'environnement de la console dans votre navigateur est conçu pour prendre la toute dernière expression d'instruction dans un programme et l'évaluer pour une valeur, puis vous montrer cette valeur.

Le résultat d'une expression d'affectation est la valeur qui a été affectée. Donc, le moteur JavaScript ne fait qu'une affectation, mais la console fait une étape supplémentaire qui consiste à définir quelle que soit ma dernière instruction, à vous rendre cette valeur. C'est pourquoi il imprime 2:

here.

Dans les instructions qui n'ont pas de valeur de retour, vous obtenez quelque chose comme non défini.

3
Mahvash Fatima

Ce que vous pouvez faire est simplement de créer votre propre fonction de type console.log avec un retour pour changer ce comportement lorsque vous faites beaucoup de codage dans la console du développeur. Voici un exemple de ce à quoi cela ressemble dans la console développeur:

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."
1
Sceptic