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のコーディング規約で詳細に説明されているのでそちらを参照下さい。