JavaScriptの文字列処理でundefinedが入り込む

JavaScriptは、C言語などとは異なり、変数を宣言するだけでは、思うように動作しない場合があります。

var str;
str = str + '123';
alert(str);

のようなコードを動作させると、ダイアログボックスには「undefined123」と表示されます。一見、きちんと変数を宣言しているように見えますし、ダイアログボックスの内容も変数str自体が存在しないかのような「undefined123」となっています。以下のように初期値を与えればundefinedは発生しません。

var str = '';
str = str + '123';
alert(str);

ダイアログボックスが「null123」なら、初期値の問題だと想像しやすいのですが、この場合は「undefined」となっています。