Fornece calços de compatibilidade para que os motores JavaScript herdados se comportem o mais próximo possível do ECMAScript 6 (Harmony).
Versão HTML do ECMAScript final final
Se você quiser usá -lo no navegador:
es6-shim
antes de seus scripts.es5-shim
corrija as implementações quebradas, por isso é fortemente recomendado sempre incluí-lo. Além disso, es5-shim
deve ser carregado antes es6-shim
. Para node.js
, io.js
ou qualquer fluxo de trabalho gerenciado por npm
(este é o método recomendado):
npm install es6-shim
Métodos alternativos:
component install paulmillr/es6-shim
se você estiver usando o componente (1).bower install es6-shim
se você estiver usando o Bower. No navegador e no nó, você também pode querer incluir unorm
; Consulte a seção String.prototype.normalize
para obter detalhes.
Map
(requer suporte ao descritor da propriedade ES5) (um calço independente também está disponível)Set
(requer suporte ao descritor da propriedade ES5) (um calço independente também está disponível)Promise
String
:fromCodePoint()
(um calço independente também está disponível)raw()
(um calço de Stanadlone também está disponível)String.prototype
:codePointAt()
(um calço independente também está disponível)endsWith()
(um calço independente também está disponível)includes()
(um calço independente também está disponível)repeat()
(um calço independente também está disponível)startsWith()
(um calço independente também está disponível)RegExp
:new RegExp
, quando recebe um regexp como padrão, não será mais lançado quando recebe um argumento de string "sinalizadores". (requer ES5)RegExp.prototype
:flags
(requer ES5) (um calço independente também está disponível)[Symbol.match]
(requer Symbol
nativos)[Symbol.replace]
(requer Symbol
nativos)[Symbol.search]
(requer Symbol
nativos)[Symbol.split]
(requer Symbol
nativos)toString
Number
:Number('0b1')
e Number('0o7')
EPSILON
(um calço independente também está disponível)MAX_SAFE_INTEGER
(um calço independente também está disponível)MIN_SAFE_INTEGER
(um calço independente também está disponível)isNaN()
(um calço independente também está disponível)isInteger()
(um calço independente também está disponível)isSafeInteger()
(um calço independente também está disponível)isFinite()
(um calço independente também está disponível)parseInt()
(um calço independente também está disponível)parseFloat()
Array
:from()
(um calço independente também está disponível)of()
(um calço independente também está disponível)Array.prototype
:copyWithin()
(um calço independente também está disponível)entries()
(um calço independente também está disponível)fill()
find()
(um calço independente também está disponível)findIndex()
(um calço independente também está disponível)keys()
(um calço independente também está disponível)values()
(um calço independente também está disponível)indexOf()
(ES6 Errata) (um calço independente também está disponível)Object
:assign()
(um calço independente também está disponível)is()
(um calço independente também está disponível)keys()
(no ES5, mas não joga mais em valores não anulados/indefinidos no ES6) (um calço independente também está disponívelsetPrototypeOf()
(ou seja> = 11)Function.prototype
:name
(ES6-SHAM, Capas IE 9-11) (um calço independente também está disponívelMath
:acosh()
(um calço independente também está disponível)asinh()
atanh()
(um calço independente também está disponível)cbrt()
(um calço independente também está disponível)clz32()
(um calço independente também está disponível)cosh()
expm1()
fround()
(um calço independente também está disponível)hypot()
imul()
(um calço independente também está disponível)log10()
(um calço independente também está disponível)log1p()
(um calço independente também está disponível)log2()
sign()
(um calço independente também está disponível)sinh()
tanh()
trunc()
A precisão das funções de matemática é 1E-11.
Reflect
apply()
(um calço independente também está disponível)construct()
defineProperty()
deleteProperty()
get()
getOwnPropertyDescriptor()
getPrototypeOf()
(um calço independente também está disponível)has()
isExtensible()
ownKeys()
(um calço independente)preventExtensions()
set()
setPrototypeOf()
Symbol
(apenas se já existir)
match
(e String#match
, String#startsWith
, String#endsWith
, String#includes
, suporte RegExp
)replace
(e String#replace
o suporte)search
(e suporte correspondente String#search
)split
(e suporte correspondente String#split
) Símbolos conhecidos só serão fornecidos se o motor já tiver suporte Symbol
.
String.prototype
Anexo B Métodos HTML (Um calço independente também está disponível)anchor()
big()
blink()
bold()
fixed()
fontcolor()
fontsize()
italics()
link()
small()
strike()
sub()
sup()
Esses métodos fazem parte do "Anexo B", o que significa que, embora sejam um padrão de defacto, você não deve usá -los. No entanto, o es6-shim
fornece e normaliza seu comportamento entre os navegadores.
O Map
, Set
e as implementações Promise
são subclassáveis. Você deve usar o seguinte padrão para criar uma subclasse no ES5 que continuará trabalhando no 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 }
} ) ;
A inclusão de um calço adequado para String.prototype.normalize
aumentaria o tamanho dessa biblioteca em um fator de mais de 4. Portanto, recomendamos que você instale o pacote unorm
ao lado es6-shim
se precisar de String.prototype.normalize
. Veja #134 para mais discussão.
Não é possível implementar o Frafmap em JavaScript puro. A implementação de coleções ES6 não possui valores fortemente, o que é fundamental para a coleção. es6-shim
decidiu não incluir um calço incorreto.
WeakMap
possui casos de uso muito incomuns, para que você provavelmente não precisará dele (use Map
simples).
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)
, por exemplo, um objeto com null
como seu [[Prototype]]
) não pode ter seu [[Prototype]]
alterado, exceto por meio de um Object.setPrototypeOf
nativo.SetPrototypeof.Symbol
bem conhecido sSymbol
Globais via Symbol.for
. Isso não viola as especificações, mas significa true
Symbol.for('Symbol.search') === Symbol.search
O projeto foi baseado inicialmente no ES6-Shim por Axel Rauschmayer.