Symbol.isConcatSpreadable

من موسوعة حسوب
مراجعة 15:37، 28 يناير 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات) (استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

الرمز المعروف 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 هذه الميزة.

مصادر ومواصفات