Memberikan kompatibilitas shims sehingga mesin javascript warisan berperilaku sedekat mungkin dengan ecmascript 6 (harmoni).
Versi HTML dari Spec Final Ecmascript 6
Jika Anda ingin menggunakannya di browser:
es6-shim
sebelum skrip Anda.es5-shim
untuk memperbaiki implementasi yang rusak, jadi sangat disarankan untuk selalu memasukkannya. Selain itu, es5-shim
harus dimuat sebelum es6-shim
. Untuk node.js
, io.js
, atau alur kerja yang dikelola npm
(ini adalah metode yang disarankan):
npm install es6-shim
Metode alternatif:
component install paulmillr/es6-shim
Jika Anda menggunakan komponen (1).bower install es6-shim
Jika Anda menggunakan Bower. Baik di browser dan node, Anda mungkin juga ingin memasukkan unorm
; Lihat bagian String.prototype.normalize
untuk detailnya.
Map
(membutuhkan dukungan deskriptor properti ES5) (shim mandiri juga tersedia)Set
(membutuhkan dukungan deskriptor properti ES5) (shim mandiri juga tersedia)Promise
String
:fromCodePoint()
(shim mandiri juga tersedia)raw()
(stanadlone shim juga tersedia)String.prototype
:codePointAt()
(shim mandiri juga tersedia)endsWith()
(shim mandiri juga tersedia)includes()
(shim mandiri juga tersedia)repeat()
(shim mandiri juga tersedia)startsWith()
(shim mandiri juga tersedia)RegExp
:new RegExp
, ketika diberi RegExp sebagai polanya, tidak akan lagi melempar ketika diberi argumen string "bendera". (Membutuhkan ES5)RegExp.prototype
:flags
(membutuhkan ES5) (shim mandiri juga tersedia)[Symbol.match]
(membutuhkan Symbol
asli)[Symbol.replace]
(membutuhkan Symbol
asli)[Symbol.search]
(membutuhkan Symbol
asli)[Symbol.split]
(membutuhkan Symbol
asli)toString
Number
:Number('0b1')
dan Number('0o7')
EPSILON
(shim mandiri juga tersedia)MAX_SAFE_INTEGER
(shim mandiri juga tersedia)MIN_SAFE_INTEGER
(shim mandiri juga tersedia)isNaN()
(shim mandiri juga tersedia)isInteger()
(shim mandiri juga tersedia)isSafeInteger()
(shim mandiri juga tersedia)isFinite()
(shim mandiri juga tersedia)parseInt()
(shim mandiri juga tersedia)parseFloat()
Array
:from()
(shim mandiri juga tersedia)of()
(shim mandiri juga tersedia)Array.prototype
:copyWithin()
(shim mandiri juga tersedia)entries()
(shim mandiri juga tersedia)fill()
find()
(shim mandiri juga tersedia)findIndex()
(shim mandiri juga tersedia)keys()
(shim mandiri juga tersedia)values()
(shim mandiri juga tersedia)indexOf()
(ES6 errata) (shim mandiri juga tersedia)Object
:assign()
(shim mandiri juga tersedia)is()
(shim mandiri juga tersedia)keys()
(dalam ES5, tetapi tidak lagi melempar pada nilai non-non-non-null/tidak terdefinisi dalam ES6) (shim mandiri juga tersediasetPrototypeOf()
(IE> = 11)Function.prototype
:name
(ES6-Sham, sampul IE 9-11) (shim mandiri juga tersediaMath
:acosh()
(shim mandiri juga tersedia)asinh()
atanh()
(shim mandiri juga tersedia)cbrt()
(shim mandiri juga tersedia)clz32()
(shim mandiri juga tersedia)cosh()
expm1()
fround()
(shim mandiri juga tersedia)hypot()
imul()
(shim mandiri juga tersedia)log10()
(shim mandiri juga tersedia)log1p()
(shim mandiri juga tersedia)log2()
sign()
(shim mandiri juga tersedia)sinh()
tanh()
trunc()
Akurasi fungsi matematika adalah 1E-11.
Reflect
apply()
(shim mandiri juga tersedia)construct()
defineProperty()
deleteProperty()
get()
getOwnPropertyDescriptor()
getPrototypeOf()
(shim mandiri juga tersedia)has()
isExtensible()
ownKeys()
(shim mandiri juga tersedia)preventExtensions()
set()
setPrototypeOf()
Symbol
(hanya jika sudah ada)
match
(dan String#match
, String#startsWith
, String#endsWith
, String#includes
, dukungan RegExp
)replace
(dan String#replace
dukungan)search
(dan String#search
)split
(dan String#split
) Simbol terkenal hanya akan disediakan jika mesin sudah memiliki dukungan Symbol
.
String.prototype
Lampiran B HTML Metode (shim mandiri juga tersedia)anchor()
big()
blink()
bold()
fixed()
fontcolor()
fontsize()
italics()
link()
small()
strike()
sub()
sup()
Metode -metode ini adalah bagian dari "Lampiran B", yang berarti bahwa meskipun mereka adalah standar defacto, Anda tidak boleh menggunakannya. Meskipun demikian, es6-shim
memberi mereka dan menormalkan perilaku mereka di seluruh browser.
Implementasi Map
, Set
, dan Promise
dapat disubklass. Anda harus menggunakan pola berikut untuk membuat subclass di ES5 yang akan terus bekerja di 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 }
} ) ;
Termasuk shim yang tepat untuk String.prototype.normalize
akan meningkatkan ukuran pustaka ini dengan faktor lebih dari 4. Jadi, sebaliknya kami menyarankan Anda menginstal paket unorm
bersama es6-shim
jika Anda membutuhkan String.prototype.normalize
. Lihat #134 untuk diskusi lebih lanjut.
Tidak mungkin untuk mengimplementasikan lemah dalam javascript murni. Implementasi ES6-Collections tidak memiliki nilai yang kuat, yang sangat penting untuk pengumpulan. es6-shim
memutuskan untuk tidak memasukkan shim yang salah.
WeakMap
memiliki kasus penggunaan yang sangat tidak biasa, jadi Anda mungkin tidak akan membutuhkannya sama sekali (gunakan Map
sederhana sebagai gantinya).
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)
, misalnya, objek dengan null
sebagai [[Prototype]]
) tidak dapat memiliki [[Prototype]]
diubah kecuali melalui Object.setPrototypeOf
asli.setPrototypeof.Symbol
terkenal sSymbol
global melalui Symbol.for
. Ini tidak melanggar spesifikasi, tetapi itu berarti Symbol.for('Symbol.search') === Symbol.search
akan true
, yang tidak akan secara default di ranah yang sudah patuh. Proyek ini awalnya didasarkan pada ES6-Shim oleh Axel Rauschmayer.