Proporciona cuñas de compatibilidad para que los motores Legacy JavaScript se comporten lo más cerca posible de ECMAScript 6 (armonía).
Versión html de la especificación Ecmascript 6 final
Si quieres usarlo en el navegador:
es6-shim antes de sus scripts.es5-shim corregiera las implementaciones rotas, por lo que se recomienda siempre incluirlo. Además, es5-shim debe cargarse antes de es6-shim . Para node.js , io.js o cualquier flujo de trabajo administrado por npm (este es el método recomendado):
npm install es6-shim
Métodos alternativos:
component install paulmillr/es6-shim si está utilizando el componente (1).bower install es6-shim si está usando Bower. Tanto en el navegador como en el nodo también puede incluir unorm ; Consulte la sección String.prototype.normalize para más detalles.
Map (requiere soporte del descriptor de propiedad ES5) (también está disponible una cuña independiente)Set (requiere soporte de descriptor de propiedad ES5) (también hay una cuña independiente disponible)PromiseString :fromCodePoint() (también está disponible una cuña independiente)raw() (también está disponible una cuña Stanadlone)String.prototype :codePointAt() (también está disponible una cuña independiente)endsWith() (también está disponible una cuña independiente)includes() (también está disponible una cuña independiente)repeat() (también está disponible una cuña independiente)startsWith() (también está disponible una cuña independiente)RegExp :new RegExp , cuando se le da un Regexp como patrón, ya no se lanzará cuando se le reciba un argumento de cadena de "banderas". (Requiere ES5)RegExp.prototype :flags (requiere ES5) (también hay una cuña independiente disponible)[Symbol.match] (requiere Symbol nativo)[Symbol.replace] (requiere Symbol nativo S)[Symbol.search] (requiere Symbol nativo S)[Symbol.split] (Requiere Symbol nativo)toStringNumber :Number('0b1') y Number('0o7')EPSILON (también está disponible una cuña independiente)MAX_SAFE_INTEGER (también hay una cuña independiente)MIN_SAFE_INTEGER (también hay una cuña independiente)isNaN() (también está disponible una cuña independiente)isInteger() (también está disponible una cuña independiente)isSafeInteger() (también está disponible una cuña independiente)isFinite() (también está disponible una cuña independiente)parseInt() (también está disponible una cuña independiente)parseFloat()Array :from() (también hay una cuña independiente)of() (también está disponible una cuña independiente)Array.prototype :copyWithin() (también está disponible una cuña independiente)entries() (también está disponible una cuña independiente)fill()find() (también está disponible una cuña independiente)findIndex() (también está disponible una cuña independiente)keys() (también está disponible una cuña independiente)values() (también hay una cuña independiente)indexOf() (ERRATA ES6) (también está disponible una cuña independiente)Object :assign() (también está disponible una cuña independiente)is() (también está disponible una cuña independiente)keys() (en ES5, pero ya no se lanza sobre valores no nulos/indefinidos en ES6) (también hay una cuña independiente disponiblesetPrototypeOf() (es decir> = 11)Function.prototype :name (ES6-Sham, cubre IE 9-11) (también está disponible una cuña independienteMath :acosh() (también está disponible una cuña independiente)asinh()atanh() (también está disponible una cuña independiente)cbrt() (también hay una cuña independiente)clz32() (también está disponible una cuña independiente)cosh()expm1()fround() (también está disponible una cuña independiente)hypot()imul() (también está disponible una cuña independiente)log10() (también está disponible una cuña independiente)log1p() (también está disponible una cuña independiente)log2()sign() (también está disponible una cuña independiente)sinh()tanh()trunc()La precisión de las funciones de matemáticas es 1e-11.
Reflect
apply() (también está disponible una cuña independiente)construct()defineProperty()deleteProperty()get()getOwnPropertyDescriptor()getPrototypeOf() (también está disponible una cuña independiente)has()isExtensible()ownKeys() (también está disponible una cuña independiente)preventExtensions()set()setPrototypeOf() Symbol (solo si ya existe)
match (y correspondiente String#match , String#startsWith , String#endsWith , String#includes , soporte RegExp )replace (y correspondiente String#replace soporte)search (y soporte String#search correspondiente)split (y soporte String#split correspondiente) Los símbolos bien conocidos solo se proporcionarán si el motor ya tiene soporte Symbol .
String.prototype Anexo B Métodos HTML (también hay una cuña independiente)anchor()big()blink()bold()fixed()fontcolor()fontsize()italics()link()small()strike()sub()sup() Estos métodos son parte del "Anexo B", lo que significa que, aunque son un estándar de facto, no debe usarlos. Sin embargo, el es6-shim les proporciona y normaliza su comportamiento entre los navegadores.
Las implementaciones Map , Set y Promise son subclasables. Debe usar el siguiente patrón para crear una subclase en ES5 que continuará funcionando en 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 }
} ) ; La inclusión de una cuña adecuada para String.prototype.normalize aumentaría el tamaño de esta biblioteca en un factor de más de 4. Por lo tanto, le recomendamos que instale el paquete unorm junto con es6-shim si necesita String.prototype.normalize . Ver #134 para más discusión.
No es posible implementar DeakMap en JavaScript puro. La implementación de las colecciones ES6 no contiene valores fuertemente, lo cual es crítico para la colección. es6-shim decidió no incluir una cuña incorrecta.
WeakMap tiene casos de uso muy inusuales, por lo que probablemente no lo necesitará en absoluto (use Map simple).
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.setPrototypeOfObject.create(null) , por ejemplo, un objeto con null como su [[Prototype]] ) no puede tener su [[Prototype]] cambiado excepto a través de un Object.setPrototypeOf nativo.setPrototypeOf.Symbol bien conocido sSymbol Globales a través Symbol.for . Esto no viola la especificación, pero sí significa ese Symbol.for('Symbol.search') === Symbol.search será true , lo que no sería de manera predeterminada en un reino nuevo que cumple. El proyecto se basó inicialmente en ES6-Shim por Axel Rauschmayer.