Обеспечивает совместимость Shims так, чтобы унаследованные двигатели JavaScript ведут себя как можно более близко к Ecmascript 6 (Harmony).
HTML -версия окончательной спецификации Ecmascript 6
Если вы хотите использовать его в браузере:
es6-shim перед сценариями.es5-shim для корректировки сломанных реализаций настоятельно рекомендуется всегда включать его. Кроме того, es5-shim должен быть загружен до es6-shim . Для node.js , io.js или любого рабочего процесса, управляемого npm (это рекомендуемый метод):
npm install es6-shim
Альтернативные методы:
component install paulmillr/es6-shim если вы используете компонент (1).bower install es6-shim если вы используете Bower. Как в браузере, так и в узле вы также можете включить unorm ; См. Раздел String.prototype.normalize для получения подробной информации.
Map (требует поддержки дескриптора свойств ES5) (также доступен отдельный прокладка)Set (требует поддержки дескриптора свойств ES5) (также доступен отдельный прокладка)PromiseString :fromCodePoint() (также доступен отдельный прокладка)raw() (также доступен STANADLONE SHIM)String.prototype :codePointAt() (также доступен автономный шим)endsWith() (также доступен автономный шим)includes() (также доступен отдельный прокладка)repeat() (также доступен отдельный прокладка)startsWith() (также доступен автономный шим)RegExp :new RegExp , когда ему будет дана регулярность в качестве шаблона, больше не будет бросаться, когда ему дают аргумент «флаг». (Требуется ES5)RegExp.prototype :flags (требуется ES5) (также доступен отдельный прокладка)[Symbol.match] (требует собственных Symbol )[Symbol.replace] (требует собственных Symbol )[Symbol.search] (требует собственных Symbol )[Symbol.split] (требует собственных Symbol )toStringNumber :Number('0b1') и Number('0o7')EPSILON (также доступен отдельный прокладка)MAX_SAFE_INTEGER (также доступен отдельный прокладка)MIN_SAFE_INTEGER (также доступен отдельный прокладка)isNaN() (также доступен отдельный шим)isInteger() (также доступен отдельный прокладка)isSafeInteger() (также доступен отдельный прокладка)isFinite() (также доступен отдельный прокладка)parseInt() (также доступен отдельный прокладка)parseFloat()Array :from() (также доступен отдельный прокладка)of() (также доступен отдельный прокладка)Array.prototype :copyWithin() (также доступен отдельный прокладка)entries() (также доступен отдельный прокладка)fill()find() (также доступен отдельный Shim)findIndex() (также доступен отдельный прокладка)keys() (также доступен отдельный прокладка)values() (также доступен отдельный Shim)indexOf() (ES6 ERRATA) (также доступен отдельный Shim)Object :assign() (также доступен отдельный прокладка)is() (также доступен отдельный прокладка)keys() (в ES5, но больше не бросает необъективные не нулевые/неопределенные значения в ES6) (также доступен отдельный ShiM.setPrototypeOf() (IE> = 11)Function.prototype :name (ES6-Sham, Covers IE 9-11) (также доступен отдельный ShiMMath :acosh() (также доступен отдельный прокладка)asinh()atanh() (также доступен отдельный прокладка)cbrt() (также доступен автономный шим)clz32() (также доступен отдельный прокладка)cosh()expm1()fround() (также доступен отдельный прокладка)hypot()imul() (также доступен отдельный прокладка)log10() (также доступен отдельный прокладка)log1p() (также доступен автономный прокладка)log2()sign() (также доступен отдельный прокладка)sinh()tanh()trunc()Точность математических функций составляет 1e-11.
Reflect
apply() (также доступен отдельный прокладка)construct()defineProperty()deleteProperty()get()getOwnPropertyDescriptor()getPrototypeOf() (также доступен отдельный прокладка)has()isExtensible()ownKeys() (также доступен отдельный прокладка)preventExtensions()set()setPrototypeOf() Symbol (только если он уже существует)
match (и соответствующий String#match , String#startsWith , String#endsWith , String#includes , RegExp support)replace (и соответствующую String#replace поддержку)search (и соответствующая String#search )split (и соответствующая поддержка String#split ) Известные символы будут предоставлены только в том случае, если у двигателя уже есть поддержка Symbol .
String.prototypeanchor()big()blink()bold()fixed()fontcolor()fontsize()italics()link()small()strike()sub()sup() Эти методы являются частью «Приложения B», что означает, что, хотя они являются стандартом Defacto, вы не должны их использовать. Тем не менее, es6-shim обеспечивает их и нормализует их поведение между браузерами.
Map , Set и Promise реализации являются подклассными. Вы должны использовать следующий шаблон для создания подкласса в ES5, который будет продолжать работать в 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 }
} ) ; Включение правильного Shim для String.prototype.normalize увеличит размер этой библиотеки более чем на 4. Поэтому вместо этого мы рекомендуем установить пакет unorm вместе с es6-shim если вам нужна String.prototype.normalize . Смотрите #134 для дальнейшего обсуждения.
Невозможно реализовать слабую карту в чистом JavaScript. Реализация ES6-Collections не имеет никаких значений, что имеет решающее значение для сбора. es6-shim решил не включать неверный прокладку.
У WeakMap есть очень необычные варианты использования, поэтому вам, вероятно, вообще не понадобится (вместо этого используйте простую 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.setPrototypeOfObject.create(null) , например, объект с null как его [[Prototype]] ) не может изменить свой [[Prototype]] кроме как через нативный Object.setPrototypeOf .Symbol sSymbol через Symbol.for . Это не нарушает спецификацию, но это означает, что Symbol.for('Symbol.search') === Symbol.search будет true , что не по умолчанию в новой соответствующей сфере. Первоначально проект был основан на ES6-Shim от Axel Rauschmayer.