読者です 読者をやめる 読者になる 読者になる

IE8 JavsScriptでのArrayインスタンス化の注意事項

下記コードがIE9では正常に動作しましたが、IE8では正常に動作しなかったので記載しておきます。

var names = [
  "Java",
  "Ruby",
  "PHP",
];
for(var i = 0, len = names.length; i < len; i++){
  alert(names[i]);
}

IE9ではnamesオブジェクトをArrayとして認識し、正常にしますが、IE8ではnamesオブジェクトをArrayとして認識されず、Objectとして認識されてしまいます。

原因は"names"の最後の要素の後に","がある事です。

この結果IE8では"names.length"の値が"4"になり、"alert(names[3])"が実行されてしまいます。
names[3]値がないのでエラーになります。

お分かりとは思いますが、下記コードに修正することでIE8でも正常に動作するようになります。

var names = [
  "Java",
  "Ruby",
  "PHP"
]
for(var i = 0, len = names.length; i < len; i++){
  alert(names[i]);
}

※"PHP"の後ろの","がなくなっています。

Arrayインスタンス化に"new Array()"を使った方が良いという意見もあるかもしれませんが、
このリスクについてはGoogleのコーディング規約で詳細に説明されているのでそちらを参照下さい。

http://cou929.nu/data/google_javascript_style_guide/#id22