FIX: polyfills String.prototype.repeat for IE (#7994)

This commit is contained in:
Joffrey JAFFEUX 2019-08-10 20:39:04 +02:00 committed by GitHub
parent e4f14ca3d7
commit 3503758599
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -316,4 +316,44 @@ if (!Array.from) {
})();
}
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat#Polyfill
if (!String.prototype.repeat) {
String.prototype.repeat = function(count) {
"use strict";
if (this == null)
throw new TypeError("can't convert " + this + " to object");
var str = "" + this;
// To convert string to integer.
count = +count;
// Check NaN
if (count != count) count = 0;
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");
count = Math.floor(count);
if (str.length == 0 || count == 0) return "";
// Ensuring count is a 31-bit integer allows us to heavily optimize the
// main part. But anyway, most current (August 2014) browsers can't handle
// strings 1 << 28 chars or longer, so:
if (str.length * count >= 1 << 28)
throw new RangeError(
"repeat count must not overflow maximum string size"
);
var maxCount = str.length * count;
count = Math.floor(Math.log(count) / Math.log(2));
while (count) {
str += str;
count--;
}
str += str.substring(0, maxCount - str.length);
return str;
};
}
/* eslint-enable */