String.prototype.repeat()

repeat() メソッドは、それが呼び出された文字列を指定した数だけコピーして結合した新しい文字列を構築し返却します。

構文

str.repeat(count)
count
0 以上、正の無限数未満の整数 : (0, +∞)。返却される新しく生成される文字列として、既存の文字列を繰り返す回数を示す。

戻り値

与えられた文字列の指定した回数分のコピーを含む新しい文字列。

例外

  • RangeError: 繰り返し数は非負数でなければならない。
  • RangeError: 繰り返し回数は無限数未満かつ、最大文字列サイズをオーバーフローしないものでなければならない。

"abc".repeat(0);      // ""
"abc".repeat(1);      // "abc"
"abc".repeat(2);      // "abcabc"
"abc".repeat(3.5);    // "abcabcabc", 少数は丸められ、整数の結果が返る
"abc".repeat(-1);     // RangeError: repeat count must be positive and less than inifinity
"abc".repeat(1/0);    // RangeError: repeat count must be positive and less than inifinity

({toString : () => "abc", repeat : String.prototype.repeat}).repeat(2)    //"abcabc" が返る (repeat は一般メソッド)

ポリフィル

このメソッドは、ECMAScript 6 仕様で追加されたため、まだすべての JavaScript 実装で使用できるわけではありません。しかし、次のスニペットで String.prototype.repeat() をポリフィルできます:

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 (;;) {
      if ((count & 1) == 1) {
        rpt += str;
      }
      count >>>= 1;
      if (count == 0) {
        break;
      }
      str += str;
    }
    // Could we try:
    // return Array(count + 1).join(this);
    return rpt;
  }
}

仕様

仕様 ステータス コメント
ECMAScript 2015 (6th Edition, ECMA-262)
String.prototype.repeat の定義
標準 初期定義。
ECMAScript 2017 Draft (ECMA-262)
String.prototype.repeat の定義
ドラフト  

ブラウザー実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート 41  24 (24) 未サポート 未サポート 9
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート 未サポート 36 24.0 (24) 未サポート 未サポート 未サポート

ドキュメントのタグと貢献者

 このページの貢献者: YuichiNukiyama, teoli, ethertank
 最終更新者: YuichiNukiyama,