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 2015 仕様で追加されたため、まだすべての JavaScript 実装で使用できるわけではありません。しかし、次のスニペットで String.prototype.repeat() をポリフィルできます:

if (!String.prototype.repeat) {
  String.prototype.repeat = function(count) {
    'use strict';
    if (this == null) { // check if `this` is null or undefined
      throw new TypeError('can\'t convert ' + this + ' to object');
    }
    var str = '' + this;
    // To convert string to integer.
    count = +count;
    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 |= 0; // floors and rounds-down it.
    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');
    }
    while (count >>= 1) { // shift it by multiple of 2 because this is binary summation of series
       str += str; // binary summation
    }
    str += str.substring(0, str.length * count - str.length);
    return str;
  }
}

仕様

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

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
基本対応Chrome 完全対応 41Edge 完全対応 ありFirefox 完全対応 24IE 未対応 なしOpera 完全対応 ありSafari 完全対応 9WebView Android 未対応 なしChrome Android 完全対応 36Edge Mobile 完全対応 ありFirefox Android 完全対応 24Opera Android 完全対応 ありSafari iOS 完全対応 9Samsung Internet Android 完全対応 ありnodejs 完全対応 4.0.0
完全対応 4.0.0
完全対応 0.12
無効
無効 From version 0.12: this feature is behind the --harmony runtime flag.

凡例

完全対応  
完全対応
未対応  
未対応
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

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

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