В некоторых случаях String.length может возвращать значение, которое отличается от фактического количества символов, видимых на экране (например, некоторые смайлики кодируются 2 единицами UTF-16):
MDN говорит :
Это свойство возвращает количество единиц кода в строке. UTF-16, строковый формат, используемый JavaScript, использует одну 16-битную единицу кода для представления наиболее распространенных символов, но для менее часто используемых символов необходимо использовать две единицы кода, поэтому возможно для возвращаемого значения по длине, чтобы не совпадать с фактическим количеством символов в строке .