ある日僕は猫にjavascriptを教えることになった第4話(文字列の連結と未定義)
前回までのあらすじ
ある日僕の飼っている猫「にゃーちゃん」がjavascriptを覚えたいっていうんだ。 javascript?javascriptってのはプログラミング言語なんだけど、なんでにゃーちゃんが教えて欲しいのかは まだよく分かっていないんだ。 とりあえずほっぺた舐められちゃったから「しょーがないな、、」って感じで教えているんだよ。 僕も猫に教えたことはないからゆっくり丁寧に教えているつもりだよ。
前回までの話
ある日僕は猫にjavascriptを教えることになった第1話
ある日僕は猫にjavascriptを教えることになった第2話(実際に書いてみよう)
ある日僕は猫にjavascriptを教えることになった第3話(変数の中身を出力する)
ある日僕は猫にjavascriptを教えることになった第4話(文字列の連結と未定義)
にゃーちゃん前回の続きからやるよ??忘れちゃったら戻ってね。にゃーちゃんどうしたの?そんな変な顔して。
うん
うん
うん
ラップだね。うん
うん。
うん
うん
うん
うん
にゃーちゃん。
前回は変数を代入してnameを参照したらniboshiと出力された
name;//"niboshi"
今回は文字列の結合をやるよ
ちょっと書いてみよう
JS Bin on jsbin.com
name + "san";
この2行目の「+」は演算子(えんざんし)といって簡単にいうとこの右と左を足しているよ。
そうだね。その計算(評価)したものが
name + "san";
//"niboshisan"
だよ。
ここではnameという中身("niboshi")に対して足しているところを確認してね??
var name + "san";
name
varっていうのは新たに変数を宣言するためのキーワードだったよね??
にゃーちゃんの指摘した下のこの意味だと
var name + "san";//②新たな変数nameに"san"を加算したい。
って書いていることとなるんだよ。
そうなんだ。同じ変数名を宣言することは好ましくないけどできなくはないんだけど、中身が何か考えて欲しいんだ。
②のvar name でまた初期化していることになるんだよ。
簡単にいうと「最初の中身の状態」を決めることだよ。
これは②の時点でまだ何も入っていないnameに+で足そうとしているので「エラー」なんだよ。
エラー。
"Unexpected token +"
なぜエラーかというと、
var name = 1
これは1が入っているでしょ?
だけだと未定義(この場合nameとは何かを「定義されていない」)とされて、undefinedっていうものが入っているんだ。
なので簡単に言うと「そこで使う+はそこでは変じゃないですか??」っていうエラーメッセージが出ている。
ここは重要なところだから試しに新たな変数
fafa;
とだけ書いてEnterおして??
その意味はjavascriptはfafaを参照したけど中身がないから、
どこかにある(定義されている)んじゃないかと思って探したけどなかった。なのでundefinedが出力されるんだよ。
じゃあ戻ると、さっきの質問のコードは、
何も入っていない変数に+で加算しようとしている。
つまり
内部でこう解釈されて、エラーになるんだよ。
まとめると、
var name = "niboshi";
name + "san";
name //"niboshisan"
//②
var name = "niboshi";
var name + "san";//"Unexpected token +"
name
①と②の違いは
①はnameを参照した行の時には中身(niboshi)が入っている。そこに"san"が足されて
"niboshi" + "san";
nameと最後の行で参照したときに"niboshisan"が出力される
2のほうは
varで同じ変数を宣言した際に初期化されてundefinedという中身が入っていないことを示す「未定義」が入っている。
何も入っていないのに"san"を足そうとしているからError
今日はこれだけ覚えようか!!
にゃーちゃんはこれからどこか行くの??
どこいくの??
にゃーちゃんは美意識高いね〜
前回までの話
ある日僕は猫にjavascriptを教えることになった第1話
ある日僕は猫にjavascriptを教えることになった第2話(実際に書いてみよう)
ある日僕は猫にjavascriptを教えることになった第3話(変数の中身を出力する)