يوفر التوافق مع حشوات بحيث تتصرف محركات 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 المستقل)Promise
String
: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
أصليًا)toString
Number
: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.setPrototypeOf
Object.create(null)
، على سبيل المثال ، كائن مع null
مثل [[Prototype]]
) لا يمكن أن يتم تغيير [[Prototype]]
باستثناء Object.setPrototypeOf
الأصلي.Symbol
معروف sSymbol
العالمي عبر Symbol.for
. هذا لا ينتهك المواصفات ، لكنه يعني هذا Symbol.for('Symbol.search') === Symbol.search
سيكون البحث true
، وهو ما لن يكون افتراضيًا في عالم متوافق جديد. استند المشروع في البداية إلى ES6-SHIM بواسطة Axel Rauschmayer.