Экспериментальный API TextEncoder может быть использован для этого, но не поддерживается Internet Explorer или Safari:
(new TextEncoder()).encode("i ♥ u i ♥ u i ♥ u i ♥ u i ♥ u").length;
Другой альтернативой является URI-кодирование строки и подсчет символы и% -кодированные escape-последовательности, как в этой библиотеке :
~-encodeURI("i ♥ u i ♥ u i ♥ u i ♥ u i ♥ u").split(/%..|./).length
На странице github есть список совместимости, который, к сожалению, не содержит IE10, но IE9.
Так как я еще не могу прокомментировать, я также должен отметить, что решение в принятом ответе не работает для кодовых точек, состоящих из нескольких кодовых блоков UTF-16.