String.fromCodePoint()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.
Сводка
Статический метод String.fromCodePoint()
возвращает строку, созданную из указанной последовательности кодовых точек.
Синтаксис
String.fromCodePoint(num1[, ...[, numN]])
Параметры
num1, ..., numN
-
Последовательность кодовых точек.
Выбрасываемые исключения
RangeError
-
Исключение
RangeError
выбрасывается в случае, если методу предоставлена неверная кодовая точка Юникода (например, "RangeError: NaN is not a valid code point").
Описание
Примеры
Пример: использование метода fromCodePoint()
String.fromCodePoint(42); // "*"
String.fromCodePoint(65, 90); // "AZ"
String.fromCodePoint(0x404); // "\u0404"
String.fromCodePoint(0x2f804); // "\uD87E\uDC04"
String.fromCodePoint(194564); // "\uD87E\uDC04"
String.fromCodePoint(0x1d306, 0x61, 0x1d307); // "\uD834\uDF06a\uD834\uDF07"
String.fromCodePoint("_"); // RangeError
String.fromCodePoint(Infinity); // RangeError
String.fromCodePoint(-1); // RangeError
String.fromCodePoint(3.14); // RangeError
String.fromCodePoint(3e-2); // RangeError
String.fromCodePoint(NaN); // RangeError
// Метод String.fromCharCode() не может вернуть символ по такой большой кодовой точке
// Следующий же метод может вернуть 4-байтный символ так же, как и обычный
// 2-байтный (то есть, он может вернуть один символ, который на самом деле
// имеет длину 2, а не 1!)
console.log(String.fromCodePoint(0x2f804)); // или 194564 в десятичной записи
Полифил
Метод String.fromCodePoint()
был добавлен к стандарту ECMAScript в 6-й версии и может поддерживаться ещё не во всех браузерах или окружениях. Используйте код ниже в качестве полифила:
/*! http://mths.be/fromcodepoint v0.1.0 by @mathias */
if (!String.fromCodePoint) {
(function () {
var defineProperty = (function () {
// IE 8 поддерживает метод `Object.defineProperty` только на элементах DOM
try {
var object = {};
var $defineProperty = Object.defineProperty;
var result = $defineProperty(object, object, object) && $defineProperty;
} catch (error) {}
return result;
})();
var stringFromCharCode = String.fromCharCode;
var floor = Math.floor;
var fromCodePoint = function () {
var MAX_SIZE = 0x4000;
var codeUnits = [];
var highSurrogate;
var lowSurrogate;
var index = -1;
var length = arguments.length;
if (!length) {
return "";
}
var result = "";
while (++index < length) {
var codePoint = Number(arguments[index]);
if (
!isFinite(codePoint) || // `NaN`, `+Infinity` или `-Infinity`
codePoint < 0 || // неверная кодовая точка Юникода
codePoint > 0x10ffff || // неверная кодовая точка Юникода
floor(codePoint) != codePoint // не целое число
) {
throw RangeError("Invalid code point: " + codePoint);
}
if (codePoint <= 0xffff) {
// кодовая точка Базовой многоязыковой плоскости (БМП)
codeUnits.push(codePoint);
} else {
// Астральная кодовая точка; делим её на суррогатную пару
// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
codePoint -= 0x10000;
highSurrogate = (codePoint >> 10) + 0xd800;
lowSurrogate = (codePoint % 0x400) + 0xdc00;
codeUnits.push(highSurrogate, lowSurrogate);
}
if (index + 1 == length || codeUnits.length > MAX_SIZE) {
result += stringFromCharCode.apply(null, codeUnits);
codeUnits.length = 0;
}
}
return result;
};
if (defineProperty) {
defineProperty(String, "fromCodePoint", {
value: fromCodePoint,
configurable: true,
writable: true,
});
} else {
String.fromCodePoint = fromCodePoint;
}
})();
}
Спецификации
Specification |
---|
ECMAScript Language Specification # sec-string.fromcodepoint |
Совместимость с браузерами
BCD tables only load in the browser