コメントした件に加え,引数の処理*1と str += str
が一回余分なのが気になってちょっと自分でも書いてみた。
function rep(str, num){
var r = '', s = String(str), n = num | 0;
if(n > 0) do if(n & 1) r += s; while((n >>= 1) && (s += s));
return r;
}
num が -1 >>> 1
までなのは変わらないが2G回も繰り返すことはそうそう無いというか上限があったほうが寧ろ安心なので放置。