تابع repeat در جاوااسکریپت

بدون شک تابع repeate یکی از توابعی است کمترین استفاده را در طراحی سایت داره اما گاهی اوقات نیاز میشه و شما میتونید بدون پیاده سازی و به راحتی از این تابع در کدهای خود استفاده کنید.تابع repeat در جاوا اسکریپت به صورت زیر تعریف شده

str.repeat(count);

همانطور که از تامش مشخثصه این تابع رشته‌ای که روی آن فرخوانی میشه را به تعداد مشخص تکرار میکنه و در خروجی برمیگردونه.
این تابع فقط یک پارامتر داره و این پارامتر تعداد تکرار های این رشته‌ی مورد نظر را مشخص میکنه این ورودی میتونه بین صفر و مثبت بی‌نهایت باشه.

اما دقت کنید که در دو حالت پیام خطا دریافت میکنید

  • وقتی ورودی این تابع کمتر از صفر باشه.
  • وقتی بی‌نهایت به عنوان ورودی به این تابع فرستاده بشه.(من نمیدونم چرا تو منبع نوشته پارامتر این تابع میتونه بین صفر مثبت بی‌نهایت باشه)

خوب مثل همیشه چندتا مثال از تابع میتونه کارکرد تابع را بهتر و بیشتر توضیح بده

'abc'.repeat(-1);   // RangeError
'abc'.repeat(0);    // ''
'abc'.repeat(1);    // 'abc'
'abc'.repeat(2);    // 'abcabc'
'abc'.repeat(3.5);  // 'abcabcabc' (count will be converted to integer)
'abc'.repeat(1/0);  // RangeError

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

اگه این تابع به هر نحو در محیط اجرای شما در دسترس نباشه برای این که پیام خطای فراخوانی تابع ناشناس را مشاهده نکنید میتونید این تابع را به صورت زیر تعریف کنید.

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;
    // To convert string to integer.
    count = +count;
    // Check NaN
    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 >= ۱ << 28)
      throw new RangeError('repeat count must not overflow maximum string size');

    var maxCount = str.length * count;
    count = Math.floor(Math.log(count) / Math.log(2));
    while (count) {
       str += str;
       count--;
    }
    str += str.substring(0, maxCount - str.length);
    return str;
  }
}

منبع وب سایت موزیلا

جهت سفارش پروژه طراحی وب سایت و سئو سایت با ما تماس بگیرید

دیدگاه خود را بنویسید