人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

変数に値を入れたあと、その変数名だけを入力しても、console.log(変数名)でも、同様に出力されます。このちがいは何でしょう。添付した画像では、出力された数値の色が違うのですが...

1514032753
●拡大する

●質問者: torimaki
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
ベストアンサー

以前の回答でも書きましたけど、Node のプロンプトは、打ち込んだ内容を評価して、その処理を行い、最後にその評価値を出力します。

ubuntu@ubunt-xenial:~$ node
> var num = 555;
undefined " var 宣言は値を持っていないので、undefined
> num
555 " num を評価した値(数値の 555)
> console.log(num);
555 " console.log() の実行結果
undefined " console.log() の評価値(戻り値)で、値は undefined

> var num2; " 変数宣言だけ
undefined " var 宣言は値を持っていないので、undefined
> num2 = 999;
999 " 代入文を評価した値は、その代入した値になる
> num2
999 " 変数を評価すると、その代入した値になる
>

この Node のプロンプトは REPL という Node.js の組み込みモジュールが処理しています。
https://nodejs.org/api/repl.html

  1. プロンプトを表示して入力を待つ
  2. 入力された値を評価(実行)する
  3. 評価した値をコンソールに出力する

を繰り返します。

(3) の評価した値をコンソールを出力するときに色がつくのは、この REPL の機能です。
console.log(num) の後の 555 が白いのは、console.log() 自体には色をつける機能が無いからです。
REPL を実行するときに、オプションを指定することができて、色をつけなくすることも可能です。

ubuntu@ubunt-xenial:~$ cat > myrepl.js
let repl = require('repl');
repl.start({useColors: false)});
^D
ubuntu@ubunt-xenial:~$ node myrepl.js
> var num = 555;
undefined " 色がついてない
> num
555 " 色がついてない
>

myrepl.js というスクリプトは、REPL を色なしで実行する、という内容です。


torimakiさんのコメント
a-kuma3さん、回答ありがとうございまーす! ややこしく、とらえずに、nodeプロンプトの働きに着目すると、わかりやすいのかな、と思ったりしました。 ただし、 >var num = 555; >console.log(num); 555 undefined のケースが、いまだに、しゃくぜんとしません。 555の出力が実行された。それなのにundifinedである。このかんじが、なんか、わかりにくいです。はい。 コンソールに出力されるときの色がつく/つかないの問題は、たんに機能のある/なしの問題という。本質問と、なんか関連性があるのかな、と複雑に思っていたりしました。この点、すっきりしました。

a-kuma3さんのコメント
>> &gt;var num = 555; << 変数の宣言は、それ自体、値を持っていません。 あまり悩むところではなくて、そう決めたから、というだけのことです。 >|| # node > let a=1, b=2, c=3; undefined " 変数の宣言は、値を持たない > ||< >> &gt;console.log(num); << 関数(console.log はメソッドですが)の呼び出しの場合、その評価値は関数の戻り値です。 >|| # node > .editor // Entering editor mode (^D to finish, ^C to cancel) function func1(a) { console.log(a*2); return; } function func2(a) { console.log(a*2); return a*2; } ^D undefined > func1(10); 20 " func1 内で呼び出している console.log の出力 undefined " func1 の戻り値(なにも返してないので、undefined) > func2(10); 20 " func2 内で呼び出している console.log の出力 20 " func2 の戻り値 > ||<

torimakiさんのコメント
宣言と、変数の評価値と、関数の評価値が一緒くたになっていて、分けがわからなくなっていたいみたいです。おかげさまで、霧が晴れてきましたー! ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ