Created
March 24, 2015 10:17
-
-
Save MatthewBarker/d54db1962ebd2bae62c5 to your computer and use it in GitHub Desktop.
Repeat polyfill - taken from MDN for use in JSfiddle
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
count = +count; | |
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 rpt = ''; | |
for (;;) { | |
if ((count & 1) == 1) { | |
rpt += str; | |
} | |
count >>>= 1; | |
if (count == 0) { | |
break; | |
} | |
str += str; | |
} | |
return rpt; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment