يوفر التوافق مع حشوات بحيث تتصرف محركات JavaScript القديمة إلى أقصى حد ممكن لـ Ecmascript 6 (الوئام).
إصدار 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) (يتوفر أيضًا Shim المستقل)Set (يتطلب دعم واصف خاصية ES5) (يتوفر أيضًا Shim المستقل)PromiseString :fromCodePoint() (Shim مستقل متاح أيضًا)raw() (A Stanadlone Shim متاح أيضًا)String.prototype :codePointAt() (شيم مستقل متاح أيضًا)endsWith() (شيم مستقل متاح أيضًا)includes() (شيم مستقل متاح أيضًا)repeat() (شيم مستقل متاح أيضًا)startsWith() (شيم مستقل متاح أيضًا)RegExp :new RegExp ، عندما يتم إعطاؤه regexp كنمط ، لن يرمي بعد الآن عند إعطاء وسيطة سلسلة "أعلام". (يتطلب ES5)RegExp.prototype :flags (تتطلب ES5) (يتوفر أيضًا Shim المستقل)[Symbol.match] (يتطلب Symbol أصليًا)[Symbol.replace] (يتطلب Symbol أصليًا)[Symbol.search] (يتطلب Symbol أصليًا)[Symbol.split] (يتطلب Symbol أصليًا)toStringNumber :Number('0b1') Number('0o7')EPSILON (يتوفر أيضًا Shim المستقل)MAX_SAFE_INTEGER (يتوفر أيضًا Shim المستقل)MIN_SAFE_INTEGER (يتوفر أيضًا Shim المستقل)isNaN() (شيم مستقل متاح أيضًا)isInteger() (يتوفر أيضًا Shim المستقل)isSafeInteger() (يتوفر أيضًا Shim المستقل)isFinite() (شيم مستقل متاح أيضًا)parseInt() (شيم مستقل متاح أيضًا)parseFloat()Array :from() (شيم مستقل متاح أيضًا)of() (شيم مستقل متاح أيضًا)Array.prototype :copyWithin() (شيم مستقل متاح أيضًا)entries() (شيم مستقل متاح أيضًا)fill()find() (يتوفر أيضًا Shim المستقل)findIndex() (شيم مستقل متاح أيضًا)keys() (شيم مستقل متاح أيضًا)values() (شيم مستقل متاح أيضًا)indexOf() (ES6 ERRATA) (يتوفر أيضًا Shim المستقل)Object :assign() (شيم مستقل متاح أيضًا)is() (شيم مستقل متاح أيضًا)keys() (في ES5 ، ولكن لم يعد يرمي على قيم غير محددة غير محددة/غير محددة في ES6) (يتوفر أيضًا Shim المستقلsetPrototypeOf() (ie> = 11)Function.prototype :name (ES6-sham ، يغطي IE 9-11) (يتوفر أيضًا Shim المستقلMath :acosh() (شيم مستقل متاح أيضًا)asinh()atanh() (شيم مستقل متاح أيضًا)cbrt() (شيم مستقل متاح أيضًا)clz32() (شيم مستقل متاح أيضًا)cosh()expm1()fround() (شيم مستقل متاح أيضًا)hypot()imul() (شيم مستقل متاح أيضًا)log10() (شيم مستقل متاح أيضًا)log1p() (يتوفر أيضًا Shim المستقل)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 )replace ( String#replace الدعم)search (و Serfer String#search المقابل)split ( String#split spist) لن يتم توفير الرموز المعروفة إلا إذا كان المحرك لديه دعم Symbol بالفعل.
String.prototype Annex B HTML Methods (يتوفر أيضًا 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 لمزيد من المناقشة.
لا يمكن تنفيذ خريطة ضعيفة في جافا سكريبت النقي. لا يحتفظ تطبيق ES6-Collections بقوة ، وهو أمر بالغ الأهمية بالنسبة للجمع. قرر es6-shim عدم تضمين شيم غير صحيح.
تحتوي WeakMap على حالات استخدام غير عادية للغاية ، لذلك ربما لن تحتاجها على الإطلاق (استخدم Map Simple بدلاً من ذلك).
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.