InternetExplorerのJavaScriptおもしろ仕様
配列(Array)について
たまにやってしまうのだが,
alert ([3,4,5,].length);
と書こうものならIEでは4と表示される.
いや,まぁ,そうな訳だけど,さぁ.
たしかに,初期化時にメモリを確保したい気持ちもわかる.
でも,最後って意味なく無い?
どうせ無いんだし.
どうせスクリプト言語なんだし.
おそらく,IEのJavaScriptインタープリタは,構文解析時に,(カンマ)の数を数えるだけでArrayオブジェクトのプロパティを初期化しているんだろう.
実験してみる.
// IE7@vistaでテスト alert ([3,4,5,,,].length); // 結果 : 6
...ちょ,ひどくね?
ここで毎度おなじみD. Flanagan先生のJavaScript5thEdition(オライリー刊)を見てみる
P.113 第3パラグラフ
...以下同様です.カンマで区切るだけで値を省略した場合は,未定義の要素が生成されます.例をみてください.var count = [1,,3]; // 3個の要素を持つ配列.ただし,真ん中の要素は未定義. var undefs = [,,]; // 2個の要素を持つ配列.両要素とも未定義.
ということらしい.つまり,最後の要素があっても"undefined"が来ない様になってるらしい.
IE,これ,まもってなくない?