レガシーJavaScriptエンジンがECMAScript 6(ハーモニー)にできるだけ密接に動作するように、互換性シムを提供します。
最終ECMAScript 6仕様のHTMLバージョン
ブラウザで使用したい場合:
es6-shim
を含めるだけです。es5-shim
壊れた実装を修正する必要があるため、常に含めることを強くお勧めします。さらに、 es5-shim
es6-shim
の前にロードする必要があります。 node.js
、 io.js
、または任意のnpm
管理ワークフロー(これは推奨される方法です):
npm install es6-shim
代替方法:
component install paulmillr/es6-shim
。bower install es6-shim
。ブラウザとノードの両方で、 unorm
含めることもできます。詳細については、 String.prototype.normalize
セクションを参照してください。
Map
(ES5プロパティ記述子サポートが必要)(スタンドアロンシムも利用できます)Set
(ES5プロパティ記述子サポートが必要)(スタンドアロンシムも利用できます)Promise
String
:fromCodePoint()
(スタンドアロンシムも利用できます)raw()
(スタナドロンシムも利用できます)String.prototype
:codePointAt()
(スタンドアロンシムも利用できます)endsWith()
(スタンドアロンシムも利用できます)includes()
(スタンドアロンシムも利用できます)repeat()
(スタンドアロンシムも利用できます)startsWith()
(スタンドアロンシムも利用できます)RegExp
:new RegExp
、パターンとしてregexpを与えられた場合、「フラグ」文字列引数を与えられたときに投げられなくなります。 (ES5が必要です)RegExp.prototype
:flags
(ES5が必要)(スタンドアロンシムも利用できます)[Symbol.match]
(ネイティブSymbol
が必要です)[Symbol.replace]
(ネイティブSymbol
が必要です)[Symbol.search]
(ネイティブSymbol
が必要です)[Symbol.split]
(ネイティブSymbol
が必要です)toString
Number
:Number('0b1')
およびNumber('0o7')
EPSILON
(スタンドアロンシムも利用できます)MAX_SAFE_INTEGER
(スタンドアロンシムも利用できます)MIN_SAFE_INTEGER
(スタンドアロンシムも利用できます)isNaN()
(スタンドアロンシムも利用できます)isInteger()
(スタンドアロンシムも利用できます)isSafeInteger()
(スタンドアロンシムも利用できます)isFinite()
(スタンドアロンシムも利用できます)parseInt()
(スタンドアロンシムも利用できます)parseFloat()
Array
:from()
(スタンドアロンシムも利用できます)of()
(スタンドアロンシムも利用できます)Array.prototype
:copyWithin()
(スタンドアロンシムも利用できます)entries()
(スタンドアロンシムも利用できます)fill()
find()
(スタンドアロンシムも利用できます)findIndex()
(スタンドアロンシムも利用できます)keys()
(スタンドアロンシムも利用できます)values()
(スタンドアロンシムも利用できます)indexOf()
(es6 errata)(スタンドアロンシムも利用できます)Object
:assign()
(スタンドアロンシムも利用できます)is()
(スタンドアロンシムも利用できます)keys()
(es5で、ただしes6で非オブジェクトの非ヌル/非定義値にスローしなくなります)(スタンドアロンシムも利用できますsetPrototypeOf()
(ie> = 11)Function.prototype
:name
(es6-sham、カバーIE 9-11)(スタンドアロンシムも利用できますMath
:acosh()
(スタンドアロンシムも利用できます)asinh()
atanh()
(スタンドアロンシムも利用できます)cbrt()
(スタンドアロンシムも利用できます)clz32()
(スタンドアロンシムも利用できます)cosh()
expm1()
fround()
(スタンドアロンシムも利用できます)hypot()
imul()
(スタンドアロンシムも利用できます)log10()
(スタンドアロンシムも利用できます)log1p()
(スタンドアロンシムも利用できます)log2()
sign()
(スタンドアロンシムも利用できます)sinh()
tanh()
trunc()
数学関数の精度は1E-11です。
Reflect
apply()
(スタンドアロンシムも利用できます)construct()
defineProperty()
deleteProperty()
get()
getOwnPropertyDescriptor()
getPrototypeOf()
(スタンドアロンシムも利用できます)has()
isExtensible()
ownKeys()
(スタンドアロンシムも利用できます)preventExtensions()
set()
setPrototypeOf()
Symbol
(すでに存在する場合のみ)
match
(および対応するString#match
、 String#startsWith
、 String#endsWith
、 String#includes
、 RegExp
サポート)replace
(および対応するString#replace
)search
(および対応するString#search
サポート)split
(および対応するString#split
サポート)エンジンにSymbol
サポートが既にある場合にのみ、よく知られているシンボルが提供されます。
String.prototype
annex b htmlメソッド(スタンドアロンシムも利用できます)anchor()
big()
blink()
bold()
fixed()
fontcolor()
fontsize()
italics()
link()
small()
strike()
sub()
sup()
これらの方法は「付録B」の一部です。つまり、それらはfatecto標準ですが、使用しないでください。それでも、 es6-shim
それらを提供し、ブラウザ全体で動作を正規化します。
Map
、 Set
、およびPromise
の実装はサブ分類可能です。次のパターンを使用して、ES5で動作し続けるES5にサブクラスを作成する必要があります。
require ( 'es6-shim' ) ;
function MyPromise ( exec ) {
var promise = new Promise ( exec ) ;
Object . setPrototypeOf ( promise , MyPromise . prototype ) ;
// ...
return promise ;
}
Object . setPrototypeOf ( MyPromise , Promise ) ;
MyPromise . prototype = Object . create ( Promise . prototype , {
constructor : { value : MyPromise }
} ) ;
String.prototype.normalize
の適切なシムを含めると、このライブラリのサイズが4倍以上増加します。代わりに、 String.prototype.normalize
が必要な場合は、 es6-shim
と一緒にunorm
パッケージをインストールすることをお勧めします。詳細については、#134を参照してください。
純粋なJavaScriptにWeakMapを実装することはできません。 ES6-Collectionsの実装は、値を強く保持していません。これはコレクションにとって重要です。 es6-shim
誤ったシムを含めないことにしました。
WeakMap
は非常に珍しいユースケースがあるため、おそらくまったく必要ありません(代わりに単純なMap
を使用してください)。
require ( 'es6-shim' ) ;
var assert = require ( 'assert' ) ;
assert . equal ( true , 'abc' . startsWith ( 'a' ) ) ;
assert . equal ( false , 'abc' . endsWith ( 'a' ) ) ;
assert . equal ( true , 'john alice' . includes ( 'john' ) ) ;
assert . equal ( '123' . repeat ( 2 ) , '123123' ) ;
assert . equal ( false , NaN === NaN ) ;
assert . equal ( true , Object . is ( NaN , NaN ) ) ;
assert . equal ( true , - 0 === 0 ) ;
assert . equal ( false , Object . is ( - 0 , 0 ) ) ;
var result = Object . assign ( { a : 1 } , { b : 2 } ) ;
assert . deepEqual ( result , { a : 1 , b : 2 } ) ;
assert . equal ( true , isNaN ( 'a' ) ) ;
assert . equal ( false , Number . isNaN ( 'a' ) ) ;
assert . equal ( true , Number . isNaN ( NaN ) ) ;
assert . equal ( true , isFinite ( '123' ) ) ;
assert . equal ( false , Number . isFinite ( '123' ) ) ;
assert . equal ( false , Number . isFinite ( Infinity ) ) ;
// Tests if value is a number, finite,
// >= -9007199254740992 && <= 9007199254740992 and floor(value) === value
assert . equal ( false , Number . isInteger ( 2.4 ) ) ;
assert . equal ( 1 , Math . sign ( 400 ) ) ;
assert . equal ( 0 , Math . sign ( 0 ) ) ;
assert . equal ( - 1 , Math . sign ( - 400 ) ) ;
var found = [ 5 , 10 , 15 , 10 ] . find ( function ( item ) { return item / 2 === 5 ; } ) ;
assert . equal ( 10 , found ) ;
var foundIndex = [ 5 , 10 , 15 , 10 ] . findIndex ( function ( item ) { return item / 2 === 5 ; } ) ;
assert . equal ( 1 , foundIndex ) ;
// Replacement for `{}` key-value storage.
// Keys can be anything.
var map = new Map ( [ [ 'Bob' , 42 ] , [ 'Foo' , 'bar' ] ] ) ;
map . set ( 'John' , 25 ) ;
map . set ( 'Alice' , 400 ) ;
map . set ( [ 'meh' ] , 555 ) ;
assert . equal ( undefined , map . get ( [ 'meh' ] ) ) ; // undefined because you need to use exactly the same object.
map . delete ( 'Alice' ) ;
map . keys ( ) ;
map . values ( ) ;
assert . equal ( 4 , map . size ) ;
// Useful for storing unique items.
var set = new Set ( [ 0 , 1 ] ) ;
set . add ( 2 ) ;
set . add ( 5 ) ;
assert . equal ( true , set . has ( 0 ) ) ;
assert . equal ( true , set . has ( 1 ) ) ;
assert . equal ( true , set . has ( 2 ) ) ;
assert . equal ( false , set . has ( 4 ) ) ;
assert . equal ( true , set . has ( 5 ) ) ;
set . delete ( 5 ) ;
assert . equal ( false , set . has ( 5 ) ) ;
// Promises, see
// http://www.slideshare.net/domenicdenicola/callbacks-promises-and-coroutines-oh-my-the-evolution-of-asynchronicity-in-javascript
// https://github.com/petkaantonov/bluebird/#what-are-promises-and-why-should-i-use-them
Promise . resolve ( 5 ) . then ( function ( value ) {
assert . equal ( value , 5 ) ;
if ( value ) throw new Error ( 'whoops!' ) ;
// do some stuff
return anotherPromise ( ) ;
} ) . catch ( function ( e ) {
assert . equal ( e . message , 'whoops!' ) ;
assert . equal ( true , e instanceof Error ) ;
// any errors thrown asynchronously end up here
} ) ;
Object.setPrototypeOf
/ Reflect.setPrototypeOf
Object.create(null)
、たとえば、 [[Prototype]]
としてnull
を持つオブジェクトは、 [[Prototype]]
ネイティブObject.setPrototypeOf
を介して変更されることはできないことに注意してください。Symbol
sSymbol.for
を介してグローバルSymbol
レジストリで作成されます。これは仕様に違反するわけではありませんが、それはSymbol.for('Symbol.search') === Symbol.search
true
であり、デフォルトでは新鮮な準拠の領域ではそうではありません。 このプロジェクトは当初、Axel RauschmayerによるES6-Shimに基づいていました。