通常のループ
今回も、JavaScript学習で引っかかった点を備忘録として書きます。
初心者の人は参考にしてみてください。
ループのための方法としては主に、
- for
- while
のいずれかが思いつくと思います。文法を覚えていない人は復習してください。
まず、forの場合は、例としては、
var i;
for ( i =0; i < 10; i ++ ) {
処理
};
ですね。
同じような処理を、whileで書くなら、
var i = 0;
while ( i < 10 ) {
処理
i ++;
)
てな感じです。
whileの()内の値が真(true)である場合に処理が行われますね。
配列のループ
では、次のような配列があるとします。
name = ["Tokyo", "Yokohama", "Nagoya", "Osaka", "Fukuoka"];
この配列の値の個数分だけループしたい場合、while文を使うなら、
var i = 0;
while ( i < name.length ) {
処理
i ++;
}
と言う風に、lengtjhプロパティで個数を知れば良いんですね。
ところが、調べていくうちに、次の書き方もできることがわかりました。
var i = 0;
while ( name[i] ) {
処理
i ++;
}
なぜ、これでも成り立つんでしょうか。
自分なりに考えました。
()内が真(true)であれば成立する。
つまり、name[i]がtrueであれば、成立するってことです。
では、trueとは何か。それは偽(false)では無いモノ。
falseになるのは、
- 0……ゼロ
- -0……マイナスゼロ
- ""……空文字
- undefined……未定義
- null……何も無し
- NaN……Not a Number
- false……そのまま
だと言うことです。
つまり、普通に文字や数字であれば、それはtrue。
上記の配列nameは、name[0]、name[1]、name[2]、name[3]、name[4]、までは中身がありますが、name[5]は未定義です。
だからwhileが処理されないんですね。
確かに!
てなわけで、引き続き、全国のJavaScript学習者のみなさん、がんばりましょう。