레거시 자바 스크립트 엔진이 가능한 한 ECMAScript 6 (하모니)에 가깝게 작동하도록 호환성을 제공합니다.
최종 ECMAScript 6 사양의 HTML 버전
브라우저에서 사용하려면 :
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
. 브라우저와 노드 모두에서 unorm
포함시키기를 원할 수도 있습니다. 자세한 내용은 String.prototype.normalize
섹션을 참조하십시오.
Map
(ES5 속성 설명 자 지원이 필요합니다) (독립형 심도 사용할 수 있습니다)Set
(ES5 부동산 설명 자 지원 필요) (독립형 심도 사용할 수 있습니다)Promise
String
:fromCodePoint()
(독립형 심도 사용할 수 있습니다)raw()
(Stanadlone Shim도 사용할 수 있습니다)String.prototype
:codePointAt()
(독립형 심도 사용할 수 있습니다)endsWith()
(독립형 심도 사용할 수 있습니다)includes()
(독립형 심도 사용할 수 있습니다)repeat()
(독립형 심도 사용할 수 있습니다)startsWith()
(독립형 심도 사용할 수 있습니다)RegExp
:new RegExp
는 REGEXP를 패턴으로 주었을 때 "플래그"문자열 인수가 주어지면 더 이상 던지지 않습니다. (ES5 필요)RegExp.prototype
:flags
(ES5 필요) (독립형 심도 사용할 수 있습니다)[Symbol.match]
(기본 Symbol
필요)[Symbol.replace]
(기본 Symbol
필요)[Symbol.search]
(기본 Symbol
필요)[Symbol.split]
(기본 Symbol
필요)toString
Number
: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()
(독립형 심도 사용할 수 있습니다)findIndex()
(독립형 심도 사용할 수 있습니다)keys()
(독립형 심도 사용할 수 있습니다)values()
(독립형 심도 사용할 수 있습니다)indexOf()
(es6 errata) (독립형 심도 사용할 수 있습니다)Object
:assign()
(독립형 심도 사용할 수 있습니다)is()
(독립형 심도 사용할 수 있습니다)keys()
(ES5에서는 더 이상 ES6에서 객체되지 않은 비 널/미확인 값에 더 이상 던지지 않음) (독립형 심도 사용할 수 있습니다.setPrototypeOf()
(예 : 11)Function.prototype
:name
(ES6-Sham, IE 9-11 커버) (독립형 심도 사용할 수 있습니다.Math
: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.prototype
Annex B HTML 방법 (독립형 심도 사용할 수 있습니다)anchor()
big()
blink()
bold()
fixed()
fontcolor()
fontsize()
italics()
link()
small()
strike()
sub()
sup()
이러한 방법은 "부록 B"의 일부이며, 이는 Defacto 표준이지만 사용해서는 안됩니다. 덜 es6-shim
그들에게 제공하고 브라우저에서 동작을 정규화합니다.
Map
, Set
및 Promise
구현은 하위 클래스가 가능합니다. ES6에서 계속 작동하는 ES5에서 서브 클래스를 만들려면 다음 패턴을 사용해야합니다.
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 }
} ) ;
String.prototype.normalize
에 적절한 shim을 포함 하여이 라이브러리의 크기를 4 개 이상 증가시킬 수 있습니다. 따라서 String.prototype.normalize
가 필요한 경우 es6-shim
과 함께 unorm
패키지를 설치하는 것이 좋습니다. 자세한 내용은 #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.setPrototypeOf
Object.create(null)
, 예를 들어, [[Prototype]]
)가 null
이있는 물체는 기본 Object.setPrototypeOf
를 통해 [[Prototype]]
을 변경할 수 없습니다.Symbol
sSymbol.for
통해 글로벌 Symbol
레지스트리로 만들어집니다. 이것은 사양을 위반하지 않지만 그 Symbol.for('Symbol.search') === Symbol.search
true
의미합니다. 이 프로젝트는 처음에 Axel Rauschmayer의 ES6-Shim을 기반으로했습니다.