Bietet Kompatibilitätsscheiben so, dass Legacy -JavaScript -Motoren sich so genau wie möglich mit ECMascript 6 (Harmonie) verhalten.
HTML -Version des endgültigen ECMAScript 6 Spec
Wenn Sie es im Browser verwenden möchten:
es6-shim
vor Ihren Skripten ein.es5-shim
erforderlich, um kaputte Implementierungen zu korrigieren. Daher wird dringend empfohlen, sie immer einzubeziehen. Zusätzlich sollte es5-shim
vor es6-shim
geladen werden. Für node.js
, io.js
oder einen npm
-verwalteten Workflow (dies ist die empfohlene Methode):
npm install es6-shim
Alternative Methoden:
component install paulmillr/es6-shim
Wenn Sie die Komponente (1) verwenden.bower install es6-shim
wenn Sie Bower verwenden. Sowohl im Browser als auch im Knoten möchten Sie möglicherweise auch unorm
einbeziehen. Weitere Informationen finden Sie im Abschnitt String.prototype.normalize
.
Map
(erfordert die Unterstützung der ES5 -Eigenschaft Deskriptor) (ein eigenständiges Shim ist ebenfalls verfügbar)Set
(Benötigt ES5 -Immobiliendeskriptorunterstützung) (ein eigenständiges Shim ist ebenfalls verfügbar)Promise
String
:fromCodePoint()
(ein eigenständiger Shim ist ebenfalls erhältlich)raw()
(Ein Stanadlone Shim ist ebenfalls erhältlich)String.prototype
:codePointAt()
(ein eigenständiger Shim ist ebenfalls verfügbar)endsWith()
(ein eigenständiger Shim ist ebenfalls erhältlich)includes()
(ein eigenständiger Shim ist ebenfalls erhältlich)repeat()
(ein eigenständiger Shim ist ebenfalls verfügbar)startsWith()
(ein eigenständiger Shim ist ebenfalls erhältlich)RegExp
:new RegExp
, wenn er ein Regexp als Muster gegeben hat, nicht mehr, wenn ein String -String -Argument "Flags" angegeben wird. (Benötigt ES5)RegExp.prototype
:flags
(erfordert ES5) (ein eigenständiger Shim ist ebenfalls verfügbar)[Symbol.match]
(erfordert native Symbol
s)[Symbol.replace]
(erfordert native Symbol
)[Symbol.search]
(erfordert native Symbol
s)[Symbol.split]
(erfordert native Symbol
s)toString
Number
:Number('0b1')
und Number('0o7')
EPSILON
(ein eigenständiger Shim ist ebenfalls erhältlich)MAX_SAFE_INTEGER
(ein eigenständiger Shim ist ebenfalls verfügbar)MIN_SAFE_INTEGER
(ein eigenständiger Shim ist ebenfalls verfügbar)isNaN()
(ein eigenständiger Shim ist ebenfalls erhältlich)isInteger()
(ein eigenständiger Shim ist ebenfalls erhältlich)isSafeInteger()
(ein eigenständiger Shim ist ebenfalls erhältlich)isFinite()
(ein eigenständiger Shim ist ebenfalls erhältlich)parseInt()
(ein eigenständiger Shim ist ebenfalls erhältlich)parseFloat()
Array
:from()
(ein eigenständiger Schim ist ebenfalls erhältlich)of()
(ein eigenständiger Schim ist ebenfalls erhältlich)Array.prototype
:copyWithin()
(ein eigenständiger Shim ist ebenfalls verfügbar)entries()
(ein eigenständiger Shim ist ebenfalls verfügbar)fill()
find()
(ein eigenständiger Shim ist ebenfalls erhältlich)findIndex()
(ein eigenständiger Shim ist ebenfalls verfügbar)keys()
(ein eigenständiger Shim ist ebenfalls erhältlich)values()
(ein eigenständiger Schim ist ebenfalls verfügbar)indexOf()
(ES6 errata) (ein eigenständiger Shim ist ebenfalls verfügbar)Object
:assign()
(ein eigenständiger Shim ist ebenfalls verfügbar)is()
(ein eigenständiger Schim ist ebenfalls erhältlich)keys()
(in ES5, aber nicht mehr auf Nicht-Anlagen-Null-/undefinierte Werte in ES6) (ein eigenständiger Shim ist ebenfalls verfügbarsetPrototypeOf()
(dh> = 11)Function.prototype
:name
(ES6-sham, dis dh 9-11) (ein eigenständiger Shim ist ebenfalls erhältlichMath
:acosh()
(ein eigenständiger Schim ist ebenfalls erhältlich)asinh()
atanh()
(ein eigenständiger Shim ist ebenfalls erhältlich)cbrt()
(ein eigenständiger Shim ist ebenfalls erhältlich)clz32()
(ein eigenständiger Shim ist ebenfalls erhältlich)cosh()
expm1()
fround()
(ein eigenständiger Schim ist ebenfalls erhältlich)hypot()
imul()
(ein eigenständiger Shim ist ebenfalls erhältlich)log10()
(ein eigenständiger Shim ist ebenfalls verfügbar)log1p()
(ein eigenständiger Shim ist ebenfalls verfügbar)log2()
sign()
(ein eigenständiger Shim ist ebenfalls erhältlich)sinh()
tanh()
trunc()
Die Genauigkeit der Mathematikfunktionen beträgt 1E-11.
Reflect
apply()
(ein eigenständiger Schim ist ebenfalls erhältlich)construct()
defineProperty()
deleteProperty()
get()
getOwnPropertyDescriptor()
getPrototypeOf()
(ein eigenständiger Shim ist ebenfalls verfügbar)has()
isExtensible()
ownKeys()
(ein eigenständiger Schim ist ebenfalls erhältlich)preventExtensions()
set()
setPrototypeOf()
Symbol
(nur wenn es bereits existiert)
match
(und entsprechende String#match
, String#startsWith
, String#endsWith
, String#includes
, RegExp
-Unterstützung)replace
(und entsprechende String#replace
)search
(und entsprechende Support String#search
)split
(und entsprechende String#split
-Unterstützung) Bekannte Symbole werden nur dann bereitgestellt, wenn der Motor bereits Symbol
hat.
String.prototype
Anhang B HTML -Methoden (ein eigenständiger Shim ist ebenfalls verfügbar)anchor()
big()
blink()
bold()
fixed()
fontcolor()
fontsize()
italics()
link()
small()
strike()
sub()
sup()
Diese Methoden sind Teil von "Anhang B", was bedeutet, dass Sie sie jedoch nicht verwenden sollten, obwohl sie ein defakto -Standard sind. Trotzdem liefert sie die es6-shim
und normalisiert ihr Verhalten über Browser hinweg.
Die Map
, Set
und Promise
-Implementierungen sind unterklagbar. Sie sollten das folgende Muster verwenden, um eine Unterklasse in ES5 zu erstellen, die weiterhin in ES6 funktioniert:
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 }
} ) ;
Das Einschließen eines ordnungsgemäßen Schims für String.prototype.normalize
würde die Größe dieser Bibliothek um einen Faktor von mehr als 4 erhöhen. Stattdessen empfehlen wir, das unorm
Paket neben es6-shim
zu installieren, wenn Sie String.prototype.normalize
benötigen. Weitere Diskussionen finden Sie in #134.
Es ist nicht möglich, Schwächen in reinem JavaScript zu implementieren. Die Implementierung von ES6-Sammeln enthält keine großen Werte, was für die Sammlung von entscheidender Bedeutung ist. es6-shim
beschloss, keine falsche Shim aufzunehmen.
WeakMap
hat sehr ungewöhnliche Anwendungsfälle, sodass Sie sie wahrscheinlich überhaupt nicht benötigen (verwenden Sie stattdessen eine einfache 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)
, z. B. ein Objekt mit null
als [[Prototype]]
) ihre [[Prototype]]
nicht über ein natives Object.setPrototypeOf
geändert haben.Symbol
sSymbol
über Symbol.for
gearbeitet haben, werden diese erstellt. Dies verstößt nicht gegen die Spezifikation, bedeutet jedoch, dass Symbol.for('Symbol.search') === Symbol.search
wird true
sein, was es in einem frischen konformen Bereich standardmäßig nicht standardmäßig würde. Das Projekt basierte zunächst auf ES6-Shim von Axel Rauschmayer.