ให้ความเข้ากันได้กับความสามารถในการเข้ากันได้เพื่อให้เครื่องยนต์จาวาสคริปต์ดั้งเดิมทำงานได้อย่างใกล้ชิดที่สุดเท่าที่จะเป็นไปได้ในการใช้งาน 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
(ต้องการการรองรับ Descriptor Property ES5) (ยังมี shim แบบสแตนด์อโลน)Set
(ต้องการการรองรับตัวบ่งชี้คุณสมบัติ ES5) (ยังมี shim แบบสแตนด์อโลน)Promise
String
:fromCodePoint()
(มี shim แบบสแตนด์อโลน)raw()
(Stanadlone Shim ยังมีอยู่ด้วย)String.prototype
:codePointAt()
(มี shim แบบสแตนด์อโลนพร้อม)endsWith()
(มี shim แบบสแตนด์อโลน)includes()
(มีชิมแบบสแตนด์อโลน)repeat()
(มี shim แบบสแตนด์อโลน)startsWith()
(มี shim แบบสแตนด์อโลน)RegExp
:new RegExp
เมื่อได้รับ regexp เป็นรูปแบบจะไม่โยนอีกต่อไปเมื่อได้รับอาร์กิวเมนต์สตริง "Flags" (ต้องการ ES5)RegExp.prototype
:flags
(ต้องใช้ ES5) (มี shim แบบสแตนด์อโลน)[Symbol.match]
(ต้องการ Symbol
ดั้งเดิม s)[Symbol.replace]
(ต้องการ Symbol
ดั้งเดิม s)[Symbol.search]
(ต้องการ Symbol
ดั้งเดิม S)[Symbol.split]
(ต้องการ Symbol
ดั้งเดิม s)toString
Number
:Number('0b1')
และ Number('0o7')
EPSILON
(มี shim แบบสแตนด์อโลน)MAX_SAFE_INTEGER
(มี shim แบบสแตนด์อโลน)MIN_SAFE_INTEGER
(มี shim แบบสแตนด์อโลน)isNaN()
(มี shim แบบสแตนด์อโลน)isInteger()
(มี shim แบบสแตนด์อโลน)isSafeInteger()
(มี shim แบบสแตนด์อโลน)isFinite()
(มี shim แบบสแตนด์อโลน)parseInt()
(มี shim แบบสแตนด์อโลน)parseFloat()
Array
:from()
(มี shim แบบสแตนด์อโลน)of()
(มี shim แบบสแตนด์อโลน)Array.prototype
:copyWithin()
(มี shim แบบสแตนด์อโลน)entries()
(มีชิมแบบสแตนด์อโลน)fill()
find()
(มีชิมแบบสแตนด์อโลน)findIndex()
(มี shim แบบสแตนด์อโลน)keys()
(มีชิมแบบสแตนด์อโลน)values()
(ยังมี shim แบบสแตนด์อโลน)indexOf()
(ES6 errata) (มี shim แบบสแตนด์อโลนพร้อม)Object
:assign()
(มีชิมแบบสแตนด์อโลน)is()
(มีชิมแบบสแตนด์อโลน)keys()
(ใน ES5 แต่ไม่มีค่าใช้จ่ายอีกต่อไปในค่าที่ไม่ใช่วัตถุที่ไม่ใช่ NULL/Undefined ใน ES6) (ยังมี shim แบบสแตนด์อโลนsetPrototypeOf()
(เช่น> = 11)Function.prototype
:name
(ES6-Sham, ครอบคลุม IE 9-11) (มี shim แบบสแตนด์อโลนMath
:acosh()
(มี shim แบบสแตนด์อโลน)asinh()
atanh()
(มี shim แบบสแตนด์อโลน)cbrt()
(มี shim แบบสแตนด์อโลน)clz32()
(มี shim แบบสแตนด์อโลน)cosh()
expm1()
fround()
(มี shim แบบสแตนด์อโลน)hypot()
imul()
(มี shim แบบสแตนด์อโลน)log10()
(มี shim แบบสแตนด์อโลน)log1p()
(มี shim แบบสแตนด์อโลน)log2()
sign()
(มี shim แบบสแตนด์อโลน)sinh()
tanh()
trunc()
ความแม่นยำของฟังก์ชั่นคณิตศาสตร์คือ 1E-11
Reflect
apply()
(มีชิมแบบสแตนด์อโลน)construct()
defineProperty()
deleteProperty()
get()
getOwnPropertyDescriptor()
getPrototypeOf()
(มี shim แบบสแตนด์อโลน)has()
isExtensible()
ownKeys()
(มี shim แบบสแตนด์อโลน)preventExtensions()
set()
setPrototypeOf()
Symbol
(เฉพาะในกรณีที่มีอยู่แล้ว)
match
(และ String#match
, String#startsWith
, String#endsWith
, String#includes
, การสนับสนุน RegExp
)replace
(และ String#replace
การสนับสนุน)search
(และ String#search
)split
(และ String#split
support) สัญลักษณ์ที่รู้จักกันดีจะได้รับหากเครื่องยนต์มีการรองรับ Symbol
แล้ว
String.prototype
Annex B HTML วิธีการ (ยังมี shim แบบสแตนด์อโลน)anchor()
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 สำหรับการสนทนาเพิ่มเติม
เป็นไปไม่ได้ที่จะใช้ beakmap ในจาวาสคริปต์บริสุทธิ์ การใช้งาน ES6-Collections ไม่ได้มีค่าอย่างยิ่งซึ่งเป็นสิ่งสำคัญสำหรับการรวบรวม es6-shim
ตัดสินใจที่จะไม่รวม 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)
, เช่นวัตถุที่มี null
เป็น [[Prototype]]
) ไม่สามารถมี [[Prototype]]
เปลี่ยนไปยกเว้นผ่านวัตถุดั้งเดิม Object.setPrototypeOf
Symbol
ที่รู้จักกันดีSymbol
ทั่วโลกผ่าน Symbol.for
สิ่งนี้ไม่ได้เป็นการละเมิดข้อมูลจำเพาะ แต่หมายความว่า Symbol.for('Symbol.search') === Symbol.search
จะเป็น true
ซึ่งจะไม่เป็นค่าเริ่มต้นในอาณาจักรที่สอดคล้องกับมาตรฐาน โครงการเริ่มต้นจาก ES6-Shim โดย Axel Rauschmayer