Это экспериментальная технология, часть предложения Harmony (ECMAScript 6).
Поскольку спецификация этой технологии ещё не стабилизировалась, проверьте таблицу совместимости её использования в различных браузерах. Также обратите внимание, что синтаксис и поведение экспериментальной технологии могут быть изменены в будущих версиях браузеров в соответствии с изменениями в спецификации.
Сводка
Метод repeat() конструирует и возвращает новую строку, содержащую указанное количество соединённых вместе копий строки, на которой он был вызван.
Синтаксис
str.repeat(count)
Параметры
count- Целое число от 0 до +∞: [0, +∞), определяющее число повторений строки во вновь создаваемой и возвращаемой строке.
Выбрасываемые исключения
RangeError- Число повторений должно быть положительным и меньше бесконечности.
Примеры
'абв'.repeat(-1); // RangeError
'абв'.repeat(0); // ''
'абв'.repeat(1); // 'абв'
'абв'.repeat(2); // 'абвабв'
'абв'.repeat(3.5); // 'абвабвабв' (количество будет преобразовано в целое число)
'абв'.repeat(1/0); // RangeError
({ toString: () => 'абв', repeat: String.prototype.repeat }).repeat(2);
// 'абвабв' (метод repeat() является обобщёным методом)
Полифилл
Этот метод был добавлен к спецификации ECMAScript 6 и может быть доступен ещё не во всех реализациях JavaScript. Однако, вы можете легко эмулировать этот метод при помощи следующего кода:
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 '';
}
// Обеспечение того, что count является 31-битным целым числом, позволяет нам значительно
// соптимизировать главную часть функции. Впрочем, большинство современных (на август
// 2014 года) браузеров не обрабатывают строки, длиннее 1 << 28 символов, так что:
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;
}
return rpt;
}
}
Спецификации
| Спецификация | Статус | Комментарии |
|---|---|---|
| ECMAScript 6 (ECMA-262) Определение 'String.prototype.repeat' в этой спецификации. |
Черновик | Изначальное определение. |
Совместимость с браузерами
| Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Базовая поддержка | 41 | 24 (24) | Нет | Нет | Нет |
| Возможность | Android | Chrome для Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Базовая поддержка | Нет | 36 (через флаг) | 24.0 (24) | Нет | Нет | Нет |
Метки документа и участники
Метки:
Contributors to this page: Mingun, dtretyakov
Обновлялась последний раз:
Mingun,