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 Latest Draft (ECMA-262)
String.prototype.repeat の定義
ドラフト  

ブラウザー実装状況

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

機能 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,