◆ Chrome Firefox ともに 512MB 弱 (2億7000万文字弱)
◆ Chrome は若干少ない

Chrome は
268,435,440 文字

Firefox は
268,435,455 文字

JavaScript は UTF-16 が内部の文字コードなので一文字 2 バイト

Chrome は
536,870,880 byte

Firefox は
536,870,910 byte

512MB (1024 * 1024 * 512) は
536,870,912 byte

Firefox はちょうどだけど Chrome はなぜかちょっと少ない

おまけ

これを求めるために 自分で適当な値入れてそれより上か下かを探すのがめんどうになってきたのでこんなものを作りました
console.time(" ")
var s = ""
try{
for(var i=0;true;i++) s = " ".repeat(i)
}catch(e){
console.log(s.length)
}
console.timeEnd(" ")

手抜きです
ですが手抜きし過ぎで 一向に終わりません
Node.js: 134868.116ms
chrome: unknown

Node.js だと 2分ちょっと
Chrome は10分ほど経っても反応なかったので強制終了させました

もうちょっとちゃんとしたのを作らないとですね



ってことで 2分岐探索
console.time(" ")
function try_ok(len){
try{
var s = ""
s = " ".repeat(len)
return true
}catch(e){
return false
}
}

var mx_guard = Number.MAX_SAFE_INTEGER
var mn_guard = 0
var p = parseInt(mx_guard/2)

while(p !== mn_guard){
try_ok(p) ?(
mn_guard = p,
p = parseInt((p + mx_guard) / 2)
):(
mx_guard = p,
p = parseInt((p + mn_guard) / 2)
)
}

console.log(p)
console.timeEnd(" ")
Node.js: 4ms
chrome: 2-4ms

chrome は内部でキャッシュされるのか2回目以降が早いです
コレにかぎらず速度測るとよく起きます