String.prototype.repeat()‎

من موسوعة حسوب
مراجعة 10:19، 21 ديسمبر 2017 بواسطة عبد اللطيف ايمش (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

الدالة String.prototype.repeat()‎ تُنشِئ سلسلةً نصيةً جديدةً تحتوي على العدد المُحدَّد من النسخ من السلسلة النصية التي استدعيت عليها، وراء بعضها بعضًا.

البنية العامة

str.repeat(count);

count

عدد صحيح بين 0 و زائد لانهاية، يُشير إلى عدد المرات التي يجب تكرار السلسلة النصية فيها لإنشاء السلسلة النصية الجديدة.

القيمة المعادة

سلسلة نصية التي تتألف من تكرار للسلسلة النصية المعطية لعدد مُحدَّد من المرات.

الاستثناءات

سيرمى الاستثناء RangeError إذا كان الوسيط المُمرَّر عددًا سالبًا.

ويجب أن يكون الوسيط أقل من اللانهاية (Infinity) ولا يؤدي إلى تجاوز الطول الأقصى للسلاسل النصية؛ وإلا فسيرمى الاستثناء RangeError أيضًا.

أمثلة

'abc'.repeat(-1);   // RangeError
'abc'.repeat(0);    // ''
'abc'.repeat(1);    // 'abc'
'abc'.repeat(2);    // 'abcabc'
'abc'.repeat(3.5);  // 'abcabcabc' (سيحوّل الوسيط إلى عدد صحيح)
'abc'.repeat(1/0);  // RangeError

({ toString: () => 'abc', repeat: String.prototype.repeat }).repeat(2);
// 'abcabc' (repeat() is a generic method)

تعويض نقص دعم المتصفحات

أُضيفَت هذه الدالة إلى معيار ECMAScript 2015، وقد لا تتوافر في جميع المتصفحات بعد، لكن يمكنك استخدام الشيفرة الآتية لتعريفها في المتصفحات التي لا تدعمها:

if (!String.prototype.repeat) {
  String.prototype.repeat = function(count) {
    'use strict';
    if (this == null) {
      throw new TypeError('can\'t convert ' + this + ' to object');
    }
    var str = '' + this;
    count = +count;
    if (count != count) {
      count = 0;
    }
    if (count < 0) {
      throw new RangeError('repeat count must be non-negative');
    }
    if (count == Infinity) {
      throw new RangeError('repeat count must be less than infinity');
    }
    count = Math.floor(count);
    if (str.length == 0 || count == 0) {
      return '';
    }
    // Ensuring count is a 31-bit integer allows us to heavily optimize the
    // main part. But anyway, most current (August 2014) browsers can't handle
    // strings 1 << 28 chars or longer, so:
    if (str.length * count >= 1 << 28) {
      throw new RangeError('repeat count must not overflow maximum string size');
    }
    var rpt = '';
    for (var i = 0; i < count; i++) {
      rpt += str;
    }
    return rpt;
  }
}

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي 41 24 غير مدعومة نعم 9

على النقيض من متصفح IE، يدعم Edge هذه الميزة.

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