rep(str, num)

コメントした件に加え,引数の処理*1str += 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回も繰り返すことはそうそう無いというか上限があったほうが寧ろ安心なので放置。

*1:弾さんのstr に数値が渡されると困る