web-dev-qa-db-ja.com

Chrome / Firefox console.logには、未定義の行が常に追加されます

毎回 console.logが実行され、undefinedという行が出力ログに追加されます。

FirefoxとWindowsでChromeの両方で発生します。

63
N. Chamaa

JSファイルからconsole.log()を実行している場合、このundefined行は追加しないでください。

コンソール自体からconsole.log()を実行している場合、それは理にかなっています。その理由は次のとおりです。コンソールで変数の名前を入力して(たとえば、windowと入力してみてください)、変数に関する情報を出力します。コンソールからvoid関数(console.logなど)を実行すると、戻り値に関する情報(この場合はundefined)も出力されます。

Chrome(Mac ver 23.0.1271.101)で両方のケースをテストしましたが、実際にコンソール内で実行するとundefined行が表示されます。このundefinedコンソールで次の行を書いたときにも表示されます:var bla = "sdfdfs"

80
talkol

Talkol´sの答えは大丈夫ですが、私はそれをもっとまっすぐにしようとします:

JavaScriptは動的言語として設計されているため、関数の戻り値の型(string、void、boolean…)は事前定義されていません。関数がreturnステートメントまたは値のない空のreturnステートメントを使用しない場合、JavaScriptは未定義を自動的に返します。つまり、JavaScriptでは、すべての関数が少なくとも未定義の何かを返します。

したがって、関数console.log() in Chrome consoleはnoまたは空のreturnステートメントを使用するため、この関数の戻り値は未定義です。この関数の戻り値はChromeコンソール。

[誰かがGoogleのconsole.log()関数の定義を見つける場所を知っている場合Chromeソースコード、リンクをコメントしてください。さらに先へ進んで、実際のコード、いいですね。]

ソース:

37

この問題を解決するには、図に従ってください。

Ctrl + Shift + J

6

ブラウザのコンソール環境は、プログラムの最後のステートメント式を取得し、値を評価してからその値を表示するように設計されています。

割り当て式の結果は、割り当てられた値です。したがって、JavaScriptエンジンは割り当てを行うだけですが、コンソールは、最後のステートメントが何であれ、その値を戻すという追加のステップを1つ実行します。それが2を印刷する理由です:

here.

戻り値を持たないステートメントでは、未定義のようなものを取得します。

3
Mahvash Fatima

あなたができることは、開発者コンソールで多くのコーディングを行うときにこの動作を変更するための戻り値を持つ独自のconsole.logのような関数を作成するだけです。開発者コンソールでの表示例を次に示します。

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