node.js exibe “indefinido” no console

Recentemente instalei node.js na minha máquina com Windows 7.

Na execução do JavaScript, recebo uma mensagem indefinida juntamente com a execução bem-sucedida da expressão.

O que há de errado aqui? Eu não notei nenhum outro efeito colateral.

insira a descrição da imagem aqui

Basta escrever "hello world"; e aperte enter … ele retornará "hello world" invés de undefined , assim não é mostrado undefined . console.log retorna undefined e também registra argumentos no console para que você receba várias mensagens.

As funções JavaScript sempre retornam algo. Se você não especificar algo para retornar na function, ‘undefined’ será retornado por padrão (você pode verificar isso no Firebug também).

Não se preocupe, isso não afeta nada, você pode ignorá-lo.

Como apontado por outros, a function javascript sempre retornará indefinida se você não especificar nenhum valor de retorno. Você pode simplesmente ignorá-lo. Não vai causar nenhum mal. Mas se te incomoda muito, então você pode desligá-lo em repl. Repl tem essa propriedade ignoreUndefined, que é configurada como false por padrão. Você pode configurá-lo para true. Tente isto:

 module.exports.repl.ignoreUndefined = true; 

Bem, a questão foi feita há alguns anos, mas ainda há outra maneira de explicar o que está acontecendo aqui.

Tente o próximo comando:

 console.log("Hello World") || "Bye World"; 

Como mencionado, a function console.log() retorna undefined normalmente e você pode escolher um melhor valor de retorno. Já que a comparação não-estrita (abstrata) considera undefined igual a false o || operador permite que você escolha.

Considerando que é apenas uma ferramenta de debugging, isso é desnecessário no uso geral, mas ajuda a entender que o console exibe o texto enviado para stdout e também evalida o comando e exibe o valor retornado ou indefinido se nenhum valor foi recebido.

Se você precisar ativar ignoreUndefined de dentro de um módulo, você pode usar a seguinte linha para simular a resposta do AvinashB sem digitar no console sozinho:

 process.stdin.emit('data', "module.exports.repl.ignoreUndefined = true;\n"); 

node também imprime undefined porque IN GENERAL , exibe o valor de retorno de cada comando e console.log não retorna nada.