ECMAScript-262 5th で拡張された機能の対応状況
ECMAScript-262 5th で新しく追加された関数/メソッドの対応状況を調べてみました。
- Ch3: Google Chrome3.0.195.38(stable)
- Ch4: Google Chrome4.0.266.0(dev)
- Fx3.5: Firefox3.5.3
- Fx3.6: Firefox3.6β5
- Op10.10: Opera10.10
- Op10.50: Opera10.50α
- Sa3: Safari3.2.3(windows)
- Sa4: Safari4.0.4(windows)
- iSa4: iPhone iOS 3.1(WebKit 528.18)
- uupaa: uupaa.js 0.7
こちらもあわせてご覧ください http://kangax.github.com/es5-compat-table/#showold
Browser(Library) | Ch3 | Ch4 | Fx3 | Fx3.5 | Fx3.6 | Op10.10 | Op10.50 | Sa3 | Sa4 | iSa4 | IE6 | IE7 | IE8 | uupaa |
Array.isArray | ○ | ○ | ○ | |||||||||||
Array.prototype.indexOf | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | |||
Array.prototype.lastIndexOf | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | |||
Array.prototype.every | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | |||
Array.prototype.some | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | |||
Array.prototype.forEach | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | |||
Array.prototype.map | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | |||
Array.prototype.filter | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | |||
Array.prototype.reduce | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ||||||
Array.prototype.reduceRight | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ||||||
Boolean.prototype.toJSON | ○ | ○ | ○ | ○ | ○ | ○ | ||||||||
Date.prototype.toISOString | ○ | ○ | ○ | ○ | ○ | ○ | ○ | |||||||
Date.prototype.toJSON | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ||||||
Date.now | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | × | |||||
Number.prototype.toJSON | ○ | ○ | ○ | ○ | ○ | ○ | ||||||||
String.prototype.trim | ○ | ○ | ○ | ○ | ○ | |||||||||
String.prototype.toJSON | ○ | ○ | ○ | ○ | ○ | ○ | ||||||||
JSON.parse | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ||||||
JSON.stringify | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ||||||
Function.prototype.bind | × | |||||||||||||
Object.getPrototypeOf | ○ | ○ | ||||||||||||
Object.getOwnPropertyDescriptor | ||||||||||||||
Object.getOwnPropertyNames | ||||||||||||||
Object.create | ||||||||||||||
Object.defineProperty | ||||||||||||||
Object.defineProperties | ||||||||||||||
Object.seal | ||||||||||||||
Object.freeze | ||||||||||||||
Object.preventExtensions | ||||||||||||||
Object.isSealed | ||||||||||||||
Object.isFrozen | ||||||||||||||
Object.isExtensible | ||||||||||||||
Object.keys | ○ |
- ○: ネイティブに実装されている
- 空白: 未実装
- ×: 理由があって実装しない
- Date.now は js で実装するよりも、存在しない状態にしておいて
var nowimpl = !!Date.now; nowimpl ? Date.now : +new Date;
-
- とやったほうが合理的で速いため
- Function.prototype.bind は要らない子
まとめ
- Safari4 と iPhone の Safari4 は別のものだよ
- Firefox3.5 → Firefox3.6 で開発の手が止まってる
- Function.prototype.bind は実装したくないなぁ。
- ってブラウザの中の人がみんな考えてそう。
- Array.isArray が Chrome4 と Opera10.50 で使える
- 調べるだけでも大変
- Object に対する拡張は JavaScriptライブラリ側ではやらない。
- Object.xxx がメジャーなブラウザでネイティブに利用可能になるのは2020年とか、それぐらい未来の話
- 実装しているブラウザが増えても、今現在出回ってるブラウザ(Chrome3, Safari4, Firefox3.6, IE6/7/8(たぶん9も) が全て新しい実装に入れ替わらなければ、js からは使えないからね → 2020年
- Object.xxx がメジャーなブラウザでネイティブに利用可能になるのは2020年とか、それぐらい未来の話