ให้ความเข้ากันได้กับความสามารถในการเข้ากันได้เพื่อให้เครื่องยนต์จาวาสคริปต์ดั้งเดิมทำงานได้อย่างใกล้ชิดที่สุดเท่าที่จะเป็นไปได้ในการใช้งาน 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 แบบสแตนด์อโลน)PromiseString :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)toStringNumber :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.setPrototypeOfObject.create(null) , เช่นวัตถุที่มี null เป็น [[Prototype]] ) ไม่สามารถมี [[Prototype]] เปลี่ยนไปยกเว้นผ่านวัตถุดั้งเดิม Object.setPrototypeOfSymbol ที่รู้จักกันดีSymbol ทั่วโลกผ่าน Symbol.for สิ่งนี้ไม่ได้เป็นการละเมิดข้อมูลจำเพาะ แต่หมายความว่า Symbol.for('Symbol.search') === Symbol.search จะเป็น true ซึ่งจะไม่เป็นค่าเริ่มต้นในอาณาจักรที่สอดคล้องกับมาตรฐาน โครงการเริ่มต้นจาก ES6-Shim โดย Axel Rauschmayer