知识点

  1. 如何实现?
  2. 字符串 += 操作的性能。
  3. 数组 join 的性能。
  4. 整数最大值。
  5. 字符串最大长度。

    具体分析

    如何实现

    有 2 种方式,一种使用字符串 += 操作,一种使用数组 join 操作。从测试结果来看,后者性能更高。 ```typescript // 方法1,普通for循环 function repeat1(str: string, count: number): string { let result = “”; for (let i = 0; i < count; i += 1) { result += str; } return result; }

// 方法2,数组join function repeat2(str: string, count: number) { return new Array(count).join(str); }

// 测试输入 let str = “fy”; let count = 1000000;

// 性能结果 console.time(“0”); str.repeat(count); // 0.069 ms console.timeEnd(“0”);

console.time(“1”); repeat1(str, count); // 76.201 ms console.timeEnd(“1”);

console.time(“2”); repeat2(str, count); // 11.820 ms console.timeEnd(“2”); ```

字符串 += 操作性能

经过引擎优化,在 count 值较小时,性能更好。

数组 join 性能

count 值较大时,性能更好。

整数最大值

由于在 JavaScript 中所有的数字使用 64 位双精度浮点数表示。其中包含 1 位符号位,11 位指数位,52位尾数位;并且尾数第一位隐含 1,共53位尾数。
因此可以表示的值区间为:[面试/JS] string.repeat() 的实现 - 图1。不包括边界值。
也因此,最大整数为:[面试/JS] string.repeat() 的实现 - 图2,这也是 Number.MAX_SAFE_INTEGER 的值。

字符串最大长度

字符串的最大长度,受到字符串下标的影响,其最大长度也是 Number.MAX_SAFE_INTEGER

参考资料

  1. Number.MAX_SAFE_INTEGER - JavaScript | MDN [https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER]