JavaScriptで、文字列を一秒毎に一文字ずつコンソール画面に表示するプログラムを書いてみたのですが、わからないことがあるので教えてください。
最初に下のように書きました。
lang
1var str = 'ABCDEFG'; //表示する文字列 2var alpha = str.split(''); //配列に変換 3 4var timer = setInterval(function() { 5 console.log(alpha[0]); //表示する 6 alpha.shift(); //配列の先頭を消す 7}, 1000); 8 9if (alpha.length === 0) clearInterval(timer); //配列が空になったら止まる(はずだった) 10
これでAから一秒ずつコンソールに表示されるのですが、Gまで表示しても(alpha.lengthが0になっても)止まらず、そのままundefinedがずっとコンソールに表示されました。そこでclearIntervalの位置を変えてみました。
lang
1var str = 'ABCDEFG'; 2var alpha = str.split(''); 3 4var timer = setInterval(function() { 5 if (alpha.length === 0) clearInterval(timer); 6 console.log(alpha[0]); 7 alpha.shift(); 8}, 1000);
これだとGの後に一回undefinedが表示されて止まりました。Gが表示されると同時に止めたいのでclearIntervalの位置を再度変えてみました。
lang
1var str = 'ABCDEFG'; 2var alpha = str.split(''); 3 4var timer = setInterval(function() { 5 console.log(alpha[0]); 6 alpha.shift(); 7 if (alpha.length === 0) clearInterval(timer); 8}, 1000);
こうするとGが表示されると止まりました。
そこで2つほど質問なのですが、
- 最初のコードでタイマーが止まらないのはなぜなんでしょうか?
- 2番目のコードで最後にundefinedが一回表示されるのはなぜでしょうか?
どちらか一方でも良いので、教えてくださると嬉しいです。よろしくお願いいたします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/04/02 14:43