Detect array limit for args spread

HTML

<pre id="log"></pre>

JavaScript

function addToLog(message) {
  document.getElementById('log').innerText += message + '\n';
}

addToLog(navigator.userAgent);

async function run() {
  let time = Date.now();
  let arr = [1];
  let low = 1;
  let high = Number.MAX_SAFE_INTEGER;

  while (high - low > 1) {
    if (arr.length < high) {
      // increase
      const step = Math.round((high - arr.length) / 2);
      // if arr is shorter than step - just x2
      arr = arr.concat(arr.slice(0, step));
    } else {
      // decrease
      arr.length = Math.round(high / 2 + low / 2);
    }

    if (Date.now() - time > 1000) {
      addToLog('Check: ' + arr.length + ' low: ' + low + ' high: ' + high);
      await new Promise((resolve) => setTimeout(resolve, 10));
      time = Date.now();
    }

    try {
      Math.min(...arr);
      low = arr.length;
    } catch (e) {
      high = Math.min(arr.length, high);
    }
  }

  addToLog('Max length: ' + arr.length + ' low: ' + low + ' high: ' + high);
}

run();