Fournit des cales de compatibilité afin que les moteurs JavaScript hérités se comportent aussi étroitement que possible à Ecmascript 6 (Harmony).
Version HTML de la spécification finale Ecmascript 6
Si vous souhaitez l'utiliser dans le navigateur:
es6-shim
avant vos scripts.es5-shim
corrige les implémentations brisées, il est donc fortement recommandé de toujours l'inclure. De plus, es5-shim
doit être chargé avant es6-shim
. Pour node.js
, io.js
, ou tout flux de travail géré par npm
(c'est la méthode recommandée):
npm install es6-shim
Méthodes alternatives:
component install paulmillr/es6-shim
si vous utilisez le composant (1).bower install es6-shim
si vous utilisez Bower. Dans le navigateur et le nœud, vous pouvez également inclure unorm
; Voir la section String.prototype.normalize
pour plus de détails.
Map
(nécessite une prise en charge du descripteur de la propriété ES5) (une cale autonome est également disponible)Set
(nécessite la prise en charge du descripteur de la propriété ES5) (une cale autonome est également disponible)Promise
String
:fromCodePoint()
(une cale autonome est également disponible)raw()
(une cale de stanadlone est également disponible)String.prototype
:codePointAt()
(une cale autonome est également disponible)endsWith()
(une cale autonome est également disponible)includes()
(une cale autonome est également disponible)repeat()
(une cale autonome est également disponible)startsWith()
(une cale autonome est également disponible)RegExp
:new RegExp
, lorsqu'on lui donne un regexp comme modèle, ne lancera plus lorsqu'il vous donnera un argument de chaîne "Flags". (nécessite ES5)RegExp.prototype
:flags
(nécessite ES5) (une cale autonome est également disponible)[Symbol.match]
(nécessite Symbol
natifs)[Symbol.replace]
(nécessite Symbol
natifs)[Symbol.search]
(nécessite Symbol
natifs)[Symbol.split]
(nécessite Symbol
natifs)toString
Number
:Number('0b1')
et Number('0o7')
EPSILON
(une cale autonome est également disponible)MAX_SAFE_INTEGER
(une cale autonome est également disponible)MIN_SAFE_INTEGER
(une cale autonome est également disponible)isNaN()
(une cale autonome est également disponible)isInteger()
(une cale autonome est également disponible)isSafeInteger()
(une cale autonome est également disponible)isFinite()
(une cale autonome est également disponible)parseInt()
(une cale autonome est également disponible)parseFloat()
Array
:from()
(une cale autonome est également disponible)of()
(une cale autonome est également disponible)Array.prototype
:copyWithin()
(une cale autonome est également disponible)entries()
(une cale autonome est également disponible)fill()
find()
(une cale autonome est également disponible)findIndex()
(une cale autonome est également disponible)keys()
(une cale autonome est également disponible)values()
(une cale autonome est également disponible)indexOf()
(es6 errata) (une cale autonome est également disponible)Object
:assign()
(une cale autonome est également disponible)is()
(une cale autonome est également disponible)keys()
(dans ES5, mais ne lance plus des valeurs non nuls / non définies non-objets dans ES6) (une cale autonome est également disponiblesetPrototypeOf()
(ie> = 11)Function.prototype
:name
(ES6-Sham, Covers IE 9-11) (une cale autonome est également disponibleMath
:acosh()
(une cale autonome est également disponible)asinh()
atanh()
(une cale autonome est également disponible)cbrt()
(une cale autonome est également disponible)clz32()
(une cale autonome est également disponible)cosh()
expm1()
fround()
(une cale autonome est également disponible)hypot()
imul()
(une cale autonome est également disponible)log10()
(une cale autonome est également disponible)log1p()
(une cale autonome est également disponible)log2()
sign()
(une cale autonome est également disponible)sinh()
tanh()
trunc()
La précision des fonctions mathématiques est 1E-11.
Reflect
apply()
(une cale autonome est également disponible)construct()
defineProperty()
deleteProperty()
get()
getOwnPropertyDescriptor()
getPrototypeOf()
(une cale autonome est également disponible)has()
isExtensible()
ownKeys()
(une cale autonome est également disponible)preventExtensions()
set()
setPrototypeOf()
Symbol
(seulement s'il existe déjà)
match
(et String#match
correspondant, String#startsWith
, String#endsWith
, String#includes
, RegExp
support)replace
(et String#replace
la prise en charge)search
(et support String#search
correspondante)split
(et support String#split
) Des symboles bien connus ne seront fournis que si le moteur a déjà une prise en charge Symbol
.
String.prototype
Annexe B HTML Méthodes (une cale autonome est également disponible)anchor()
big()
blink()
bold()
fixed()
fontcolor()
fontsize()
italics()
link()
small()
strike()
sub()
sup()
Ces méthodes font partie de "l'annexe B", ce qui signifie que bien qu'elles soient une norme Defacto, vous ne devriez pas les utiliser. Néanmoins, le es6-shim
leur fournit et normalise leur comportement entre les navigateurs.
Les implémentations Map
, Set
et Promise
sont sous-classables. Vous devez utiliser le modèle suivant pour créer une sous-classe dans ES5 qui continuera de fonctionner dans ES6:
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 }
} ) ;
Y compris un cale approprié pour String.prototype.normalize
augmenterait la taille de cette bibliothèque par un facteur de plus de 4. Nous vous recommandons donc d'installer le package unorm
aux côtés d' es6-shim
si vous avez besoin String.prototype.normalize
. Voir # 134 pour plus de discussions.
Il n'est pas possible de mettre en œuvre un faiblemap faible en JavaScript pur. L'implémentation ES6-Collections ne contient pas de valeurs fortement, ce qui est essentiel pour la collection. es6-shim
a décidé de ne pas inclure une cale incorrecte.
WeakMap
a des cas d'utilisation très inhabituels, vous n'en aurez donc probablement pas besoin (utilisez Map
simple à la place).
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)
, par exemple, un objet avec null
car son [[Prototype]]
) ne peut pas avoir leur [[Prototype]]
modifié sauf via un Object.setPrototypeOf
natif.setprototypeof.Symbol
bien connus sSymbol
via Symbol.for
. Cela ne viole pas la spécification, mais cela signifie que Symbol.for('Symbol.search') === Symbol.search
sera true
, ce qu'il ne serait pas par défaut dans un nouveau domaine conforme. Le projet était initialement basé sur ES6-SHIM d'Axel Rauschmayer.