Why strings look simple until Unicode, immutability, and performance get involved.
Strings in JavaScript are immutable — every method that seems to 'modify' a string (slice, replace, toUpperCase) actually returns a new string, leaving the original untouched. That immutability is also why repeated concatenation in a loop can get expensive: each += potentially creates a new string in memory rather than appending in place, which is part of why patterns like array.join() exist as a faster alternative for building large strings.
Strings are also more subtle than they look once you leave ASCII. JavaScript strings are UTF-16 internally, so length and index-based access count UTF-16 code units, not visible characters — which is why some emoji and rare characters (anything outside the Basic Multilingual Plane) report a length of 2 and can break naive character-by-character logic. That's also the difference between charCodeAt (a single UTF-16 unit) and codePointAt (the full Unicode code point, correctly handling surrogate pairs).
What you'll walk away knowing
No questions match "".