iOS, Androidのめぼしいバージョンのデフォルトブラウザについて、ECMAScript 5 compatibility table を使ってES5の対応度合いを調べました。既にありそうだなーと思いつつパッと見当たらなかったので。
どれもエミュレータで調べたものですし、特にAndroidについてはメーカーが手を入れてヘンテコリンなことになっている可能性も結構あるので、目安程度に。
全てのiOSデバイスが6.0以上、Androidデバイスが4.1以上になればstrict mode含めてやりたい放題(かも?)、ということが分かりますね。いつになることやら。
feature/os version | ios-4.3.2 | ios-5.0 | ios-5.1 | ios-6.0 | android-1.6 | android-2.1 | android-2.3.3 | android-3.0 | android-4.0.2 | android-4.1.1 |
---|---|---|---|---|---|---|---|---|---|---|
Object.create | yes | yes | yes | yes | no | no | yes | yes | yes | yes |
Object.defineProperty | yes | yes | yes | yes | no | no | yes | yes | yes | yes |
Object.defineProperties | yes | yes | yes | yes | no | no | yes | yes | yes | yes |
Object.getPrototypeOf | yes | yes | yes | yes | no | yes | yes | yes | yes | yes |
Object.keys | yes | yes | yes | yes | no | no | yes | yes | yes | yes |
Object.seal | no | yes | yes | yes | no | no | no | no | yes | yes |
Object.freeze | no | yes | yes | yes | no | no | no | no | yes | yes |
Object.preventExtensions | no | yes | yes | yes | no | no | no | no | yes | yes |
Object.isSealed | no | yes | yes | yes | no | no | no | no | yes | yes |
Object.isFrozen | no | yes | yes | yes | no | no | no | no | yes | yes |
Object.isExtensible | no | yes | yes | yes | no | no | no | no | yes | yes |
Object.getOwnPropertyDescriptor | yes | yes | yes | yes | no | no | yes | yes | yes | yes |
Object.getOwnPropertyNames | yes | yes | yes | yes | no | no | yes | yes | yes | yes |
Date.prototype.toISOString | yes | yes | yes | yes | no | yes | yes | yes | yes | yes |
Date.now | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
Array.isArray | yes | yes | yes | yes | no | no | yes | yes | yes | yes |
JSON | yes | yes | yes | yes | no | yes | yes | yes | yes | yes |
Function.prototype.bind | no | no | no | yes | no | no | no | no | yes | yes |
String.prototype.trim | yes | yes | yes | yes | no | no | yes | yes | yes | yes |
Array.prototype.indexOf | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
Array.prototype.lastIndexOf | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
Array.prototype.every | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
Array.prototype.some | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
Array.prototype.forEach | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
Array.prototype.map | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
Array.prototype.filter | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
Array.prototype.reduce | yes | yes | yes | yes | no | yes | yes | yes | yes | yes |
Array.prototype.reduceRight | yes | yes | yes | yes | no | yes | yes | yes | yes | yes |
Getter in property initializer | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
Setter in property initializer | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
Property access on strings | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
Reserved words as property names | no | yes | yes | yes | no | no | no | yes | yes | yes |
Zero-width chars in identifiers | no | no | no | yes | no | no | no | no | no | yes |
Strict mode | no | yes | yes | yes | no | no | no | yes | no | yes |