Эта статья представляет собой расшифровку моей бесплатной серии YouTube об основах веб-разработки. Если вы предпочитаете смотреть, а не читать, посетите мой канал Dev Newbs.

Привет мои товарищи новички. Джейкоб здесь, с еще одним методом String. Сегодняшний способ один из самых простых. Мне нравятся эти простые методы, потому что их можно просто использовать. Никаких махинаций, никаких подвохов. Конечно, если вы явно не ищете их, что мы, конечно, ищем. Итак, приступим.

Метод repeat() возвращает новую строку, содержащую указанное количество копий строки, для которой он был вызван, объединенных вместе.

Единственный необходимый параметр — это положительное целочисленное значение, указывающее, сколько раз мы хотим, чтобы данная строка повторялась.

В результате мы получаем созданную строку или RangeError в случае, если количество повторений либо отрицательное, либо это приводит к тому, что результирующая строка превышает максимальный размер строки.

Давайте посмотрим на основное использование в первом примере.

"Repeat (0):   '" + "Ab ".repeat(0) + "'"       // empty string
"Repeat (1):   '" + "Ab ".repeat(1) + "'"       // 'Ab '
"Repeat (2):   '" + "Ab ".repeat(2) + "'"       // 'Ab Ab '
"Repeat (5.2): '" + "Ab ".repeat(5.2) + "'"     // 'Ab Ab Ab Ab Ab '   
"true:         '" + "Ab ".repeat(true) + "'"    // 'Ab '
"empty param:  '" + "Ab ".repeat() + "'"        // 'Ab '
"false:        '" + "Ab ".repeat(false) + "'"       // empty string
"null:         '" + "Ab ".repeat(null) + "'"        // empty string
"undefined:    '" + "Ab ".repeat(undefined) + "'"   // empty string
"NaN:          '" + "Ab ".repeat(NaN) + "'"         // empty string

В базовом примере использования показано поведение метода, когда мы предоставляем значения, которые либо являются целыми числами, либо могут интерпретироваться как единицы. Целочисленные значения ноль, один и два дают нам именно то, что мы ожидаем. Плавающее значение более интересно. Часть после запятой эффективно отсекается, и мы работаем только с целочисленным значением. Пока метод ведет себя так, как мы и ожидали.

Если мы предоставляем логическое значение true, мы интерпретируем его как единицу. False преобразуется в ноль, как и любое другое значение или специальная константа, такая как «null», «undefined» или «NaN». Следует упомянуть еще один случай: если мы не предоставляем никакого значения, то значение по умолчанию равно нулю. В спецификации это не упоминается, поэтому возможно, что это просто способ реализации в браузере Chrome. Так что имейте это в виду.

Хорошо, давайте попробуем некоторые махинации с RangeError.

try { 
    console.log("Ab ".repeat(-1)); 
}
catch(err){ 
    console.log(err); 
}
// RangeError: Invalid count value at String.repeat (<anonymous>)
try { 
    console.log("Ab ".repeat(3/0));
}
catch(err){ 
    console.log(err); 
}
// RangeError: Invalid count value at String.repeat (<anonymous>)
try { 
    let As = "A".repeat(536870889);
}
catch(err){ 
    console.log(err); 
}
// RangeError: Invalid string length at String.repeat (<anonymous>)

RangeError — это ошибка, возникающая только в нескольких случаях. Первый из них является отрицательным значением. Это мы рассмотрели в первом блоке кода. Второй случай, если мы предоставляем значение, равное или превышающее положительную бесконечность. И угадайте, что получится, если разделить положительное значение на ноль? Бинго! Итак, это блок-код номер два.

И третий — если мы создадим строку длиннее максимально доступной длины строки. На самом деле это число может быть разным в разных браузерах, а также может быть ограничено доступными ресурсами компьютера. Но я вернусь к этому позже в примере номер три. А пока просто примите это как нечто, что является правдой. Значение в коде третьего блока ровно на единицу больше максимальной доступной длины строки, поэтому выдается RangeError.

Итак, вернемся к максимальной длине. Вы не можете получить максимальную доступную длину строки, просто обратившись к какой-либо константе или встроенному методу, что является позором. К счастью, умные люди в Интернете могут помочь практически во всем, так что вот код из переполнения стека, который я беззастенчиво скопировал. Поприветствуйте автора кодового имени пользователя Джека Гриффина. А вот код, который дает нам максимальную длину строковой переменной в нашем браузере.

// stack overflow // question: 13697500 // author: Jack Giffin
for (var startPow2 = 1; startPow2 < 9007199254740992; startPow2 *= 2)
    try {" ".repeat(startPow2);} catch(e) {
        break;
    }
var floor = Math.floor, mask = floor(startPow2 / 2);
while (startPow2 = floor(startPow2 / 2))
    try {
        " ".repeat(mask + startPow2);
        mask += startPow2;              // the previous statement succeeded
    } catch(e) {}
console.log("The max string length for this browser is " + mask);
// The max string length for this browser is 536870888

Это все на сегодня. Мы узнали, что не все методы String так ужасны, как другие. Это был один из хороших.

Как всегда спасибо за внимание и до встречи в следующей статье завтра.