Over de maximale lengte van strings in JavaScript
In het item Fractals zelf doen: H-fractal gebeurt het dat een figuur niet kan worden getekend omdat de maximale lengte van een string is overschreden. Op dez epagina wordt daar een en ander over gezegd.
In elke programmeertaal heb je variabelen nodig om getallen en karakterreeksen in op te slaan. Gewoonlijk zijn getallen
één, twee, vier, acht of zestien bytes lang, afhankelijk van de gewenste nauwkeurigheid. Bij karakterreeksen
(strings) gaat het vaak anders, omdat de vereiste lengte voor een string per string verschilt. Maximale lengtes zijn vaak
256 of 512 karakters.
De maximale lengte van een string in JavaScript is vastgelegd in de standaard ECMA-6 (juni 2015).
Hoewel de JavaScript-standaard toestaat dat een string 253-1 (= 9 007 199 254 740 991) karakters lang is, mogen
browsers de maximale lengte van een string beperken. En dat doen ze ook!
Op het moment dat dit geschreven wordt zijn de getallen:
Browser | Windows 11 | Android | Edge | 536870888 | 268435440 | FireFox | 1073741822 | 1073741822 | Chrome | 536870888 | 268435440 |
Opvallend is dat FireFox aanzienlijk langere strings toestaat dan Edge en Chrome. Verder zijn de getallen bij Edge en
Chrome aan elkaar gelijk. Dat heeft er ongetwijfeld mee te maken dat Edge en Chrome op dezelfde render-motor (Chromium) draaien.
Verder valt het op dat Edge en Chrome in de Android-versie minder lange strings toestaan dan in de Windows versie.
N.B.: Over producten van Apple heb ik geen informatie.
Met behulp van het onderstaande JavaScript, dat afkomstig is van (en door mij enigszins bewerkt) Stackoverflow, is het is betrekkelijk eenvoudig om uit te vinden hoeveel karakters je kwijt kunt in een string, met de browser die je nu gebruikt.
for (var startPow2 = 1; startPow2 < 9007199254740992; startPow2 *= 2)
try {" ".repeat(startPow2);}
catch(e) {
break;
}
var floor = Math.floor, mask = floor(startPow2 / 2);
while (startPow2 = floor(startPow2 / 2))
try {
" ".repeat(mask + startPow2);
mask += startPow2; // het vorige statement ging goed
} catch(e) {}
window.alert("De max. string lengte voor deze browser is " + mask);
Opmerking:
Het is niet vreemd dat de maximale string-lengte door de browsers wordt beperkt. Het maximaal aantal karakters, met 2 bytes
per karakter, vraagt ca. 18 PB (petabyte), ofwel 18 000 000 GB. Er zijn weinig computers die over zoveel geheugen beschikken.