JavaScript repeat-Polyfill:这些代码结构是否有意义?

时间:2016-02-19 07:16:33

标签: javascript algorithm

我试图理解String.prototype.repeat()的代码 - polyfill。

此处填写完整代码:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/repeat

我问自己以下部分是否合乎逻辑:

    // Tries to cast the parameter 'count' to a number.
    count = +count;

    // If the cast fails ('count' has become NaN) then
    // assign 0 to the parameter-variable.
    if (count != count) {
      count = 0;
    }

    // Does some more checks with the parameter ...
    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');
    }
    // End of checks ...

    // Rounds the parameter to next lower integer.
    count = Math.floor(count);

    // Checks if count is 0. In that case: Terminate 
    // the function / Return an empty string.
    if (str.length == 0 || count == 0) {
      return '';
    }

为什么不在演员表失败后终止(在顶部)?

而是分配0,运行检查,检查0.如果该状态为真则终止。

对我没用。

有什么我不理解的吗?

1 个答案:

答案 0 :(得分:1)

因为此polyfill需要实现与规范中相同的行为。规范说如果值小于零,你应该抛出错误。

此外,在开始时转换为数字很好,但可以直接调用此函数,如下所示:

var string = 'abc';
string.repeat(-1); // throws range error