Вы можете передать список значений в функцию:
console.log(String.fromCodePoint(0xd83d, 0xdca9));
Таким образом, «действительный аргумент» для String.fromCodePoint()
не обязательно является единственным значением, и действительно длясимвол, которому требуется суррогатная пара, по определению не может быть единственным значением.Зачем?Поскольку каждое отдельное числовое исходное значение, с точки зрения String.fromCodePoint()
, должно быть 16-битным (2-байтовым) значением.Если бы вы могли передавать большие одиночные числа, в суррогатных парах не было бы необходимости!
Редактировать: большая часть вышеприведенного абзаца неточна;.fromCodePoint()
метод будет принимать полные значения кодовой точки Unicode (больше 16 бит).Конечно, все равно приходится разбивать их на суррогатные пары, потому что строки JavaScript - это UTF-16, но это означает, что если у вас есть полноразмерные кодовые точки Unicode, вам не нужно разбивать их самостоятельно, что хорошо,Однако, если у вас do уже есть пары, на самом деле нет смысла объединять их самостоятельно, поскольку метод также работает с парами, когда они передаются как часть списка точек.
Если у вас есть значения вмассив, вы можете вызвать функцию с apply
:
var points = [0xd83d, 0xdca9];
console.log(String.fromCodePoint.apply(String, points));