InternetExplorerのJavaScriptおもしろ仕様

配列(Array)について

たまにやってしまうのだが,

alert ([3,4,5,].length);

と書こうものならIEでは4と表示される.

いや,まぁ,そうな訳だけど,さぁ.

たしかに,初期化時にメモリを確保したい気持ちもわかる.

でも,最後って意味なく無い?

どうせ無いんだし.

どうせスクリプト言語なんだし.

おそらく,IEJavaScriptインタープリタは,構文解析時に,(カンマ)の数を数えるだけで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,これ,まもってなくない?



にしても,なんか,このブログ,反IEプロ市民のブログみたくなってきてない?