我试图理解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.如果该状态为真则终止。
对我没用。
有什么我不理解的吗?
答案 0 :(得分:1)
因为此polyfill需要实现与规范中相同的行为。规范说如果值小于零,你应该抛出错误。
此外,在开始时转换为数字很好,但可以直接调用此函数,如下所示:
var string = 'abc';
string.repeat(-1); // throws range error