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 は要らない子

まとめ

  • Safari4iPhoneSafari4 は別のものだよ
  • 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年