在ES6中为字符串新增加了repeate方法,可以方便地创建由某个字符串重复多次形成的字符串。

该方法接受一个指定重复次数的自然数作为参数;当使用负数或者无穷大作为参数时会抛出RangeError;当使用正实数作为参数时会使用其整数部分。

1
2
3
4
console.log('ab'.repeate(2));    // => 'abab'
console.log('ab'.repeate(-1));    // => RangeError
console.log('ab'.repeate(Infinity));    // => RangeError
console.log('ab'.repeate(2.1));    // => 'abab'

很方便,在不支持ES6的浏览器中如何实现呢?

我们首先会想到使用循环,但是更好的方法是使用Array构造函数的一个特性和数组的join方法。

要使用的Array构造函数的特性是当Array的构造函数接受一个自然数n为参数时,会创建一个每一项都是undefined、长度为n的数组。

接下来,我们只需要使用重复的字符串作为分隔符在生成的数组上调用join方法就可以得到我们想要的字符串了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function strRepeate(str, n) {
  if ( typeof n !== 'number' ) {
    throw new TypeError('repeate count must be a number');
  }
  if ( n < 0 ) {
    throw new RangeError('repeat count must be non-negative');
  }
  if ( n === Infinity ) {
    throw new RangeError('repeat count must be less than infinity');
  }

  n = Math.floor(n);

  return new Array(n + 1).join(str);
}

注意:不建议使用Array构造函数创建数组,建议始终使用数组字面值创建数组。

小结

ES6为字符串提供了repeate方法,用于创建由某个字符串重复多次形成的字符串。

在不支持ES6的浏览器,我们使用Array构造函数和数组的join方法也可以实现相同的功能。