Symbol.isConcatSpreadable
الرمز المعروف Symbol.isConcatSpreadable
يُستخدَم لضبط إمكانية تسطيح (flatten) أحد الكائنات إلى عناصر مصفوفة باستخدام الدالة Array.prototype.concat()
.
سمات الخاصية Symbol.isConcatSpreadable | |
---|---|
قابلة للكتابة | لا |
قابلة للإحصاء | لا |
قابلة للضبط | لا |
الوصف
الرمز @@isConcatSpreadable
(أي Symbol.isConcatSpreadable
) يمكن تعريفه كخاصية تابعة مباشرةً للكائن أو كخاصية موروثة، ويحمل قيمةً منطقيةً؛ ويمكنه التحكم بسلوك المصفوفات أو الكائنات الشبيهة بالمصفوفات:
- لكائنات المصفوفات، السلوك الافتراضي هو نشر (spread، أو تسطيح flatten) العناصر؛ ويمكن أن يُستخدَم الرمز
Symbol.isConcatSpreadable
لتفادي تسطيح المصفوفة. - للكائنات الشبيهة بالمصفوفات، السلوك الافتراضي هو عدم نشر (spread، أو تسطيح flatten) العناصر؛ ويمكن أن يُستخدَم الرمز
Symbol.isConcatSpreadable
لإجبار تسطيح الكائن.
أمثلة
المصفوفات
افتراضيًا، تنشر (أو تُسطِّح) الدالة Array.prototype.concat()
المصفوفات إلى نتائجها:
var alpha = ['a', 'b', 'c'],
numeric = [1, 2, 3];
var alphaNumeric = alpha.concat(numeric);
console.log(alphaNumeric); // ['a', 'b', 'c', 1, 2, 3]
أما عند ضبط الرمز Symbol.isConcatSpreadable إلى false، فمكننا تعطيل السلوك الافتراضي:
var alpha = ['a', 'b', 'c'],
numeric = [1, 2, 3];
numeric[Symbol.isConcatSpreadable] = false;
var alphaNumeric = alpha.concat(numeric);
console.log(alphaNumeric); // ['a', 'b', 'c', [1, 2, 3] ]
الكائنات الشبيهة بالمصفوفات
أما للكائنات الشبيهة بالمصفوفات، فالسلوك الافتراضي هو عدم نشرها، ويجب ضبط الخاصية Symbol.isConcatSpreadable
إلى true
للحصول على مصفوفة مسطحة:
var x = [1, 2, 3];
var fakeArray = {
[Symbol.isConcatSpreadable]: true,
length: 2,
0: 'hello',
1: 'world'
}
x.concat(fakeArray); // [1, 2, 3, "hello", "world"]
ملاحظة: الخاصية length
تُستخدَم للتحكم بعدد خاصيات الكائن التي ستُضاف؛ فالخاصية length: 2
تعني أنَّ هنالك خاصيتان ستُضافان إلى الكائن.
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | 48 | 48 | غير مدعومة | نعم | نعم |
على النقيض من متصفح IE، يدعم متصفح Edge هذه الميزة.
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).