JavaScriptのfor文の条件に文字列リテラルを使う時の注意点
ちょっと簡略化してあるが、JavaScriptで以下のコードがうまく動かなかった。for文の中にさえ入ってこない。
var kanto = "8-14"; var range = kanto.split("-"); for (var i = range[0]; i <= range[1]; i++) { // 処理 }
結局range[0]、range[1]をparseIntすれば動いた。
var kanto = "8-14"; var range = kanto.split("-"); for (var i = parseInt(range[0]); i <= parseInt(range[1]); i++) { // 処理 }
この記事を書く途中で見つけたページによると、比較演算子「<=」は数値だけではなく文字列にも使えるらしい。だからparseIntを使わないと、数値変換されずに文字列比較されて想定通りの動作をしなかった。
ちなみに var kanto = "08-14" としておけば問題なく動く。明示的な変換、キャストが必要ないと、逆に言語の細かな部分の仕様を知っておく必要があるのかな、と思ったり。何事もトレードオフか。。