JSFiddle - React, Tailwind, and code Playground

HTML

<pre id="scene"></pre>

JavaScript

var timeStart = Date.now();
    var countKey, countValue, amountLeft, itemLength, error;
    var leftCount = 3;
    var occupied = leftCount;
    var i = 0;
    var data = "m";

    while (true) {
      try {
        localStorage.setItem('testKey' + i, data);
        data = data + data;
      } catch (e) {
        break;
      }
      i++;
    }

    while (true) {
      try {
        localStorage.setItem('testKey' + i, '11111111112222222222333333333344444444445555555555666661111111111222222222233333333334444444444555555555566666');
      } catch (e) {
        var error = e;
        break;
      }
      i++;
    }

    for (var i = 0; i < localStorage.length; i++) {
      countKey = localStorage.key(i);
      countValue = localStorage.getItem(localStorage.key(i));
      itemLength = countKey.length + countValue.length;
      //if the key is one of our 'test' keys count it separately
      if (countKey.indexOf("testKey") === 0) {
        leftCount = leftCount + itemLength;
      }
      occupied = occupied + itemLength;
    };

    occupied = (((occupied * 16) / (8 * 1024)) / 1024).toFixed(2);
    amountLeft = (((leftCount * 16) / (8 * 1024)) / 1024).toFixed(2);
    //iterate through all localStorage keys and remove 'testKeys'
    Object.keys(localStorage).forEach(function (key) {
      if (key.indexOf("testKey") === 0) {
        localStorage.removeItem(key);
      }
    });

    var time = Date.now() - timeStart;
    var message = [
      'Finished in: ' + time + 'ms',
      'total localStorage: ' + occupied + 'Mb',
      'localStorage left: ' + amountLeft + 'Mb'
    ].join('\n');
    document.getElementById('scene').innerHTML = message;