String.fromCodePoint()
Статичний метод String.fromCodePoint()
повертає рядок, створений з послідовності кодів символів Unicode переданих цілими числами.
Синтаксис
String.fromCodePoint(num1[, ...[, numN]])
Параметри
num1, ..., numN
- Послідовність цілих чисел, кожне з яких передає код символа Unicode.
Вертає
Рядок із символів, що відповідають переданій послідовності кодів символів Unicode.
Винятки
- Викидає виняток
, якщо вказано непередбачений (відсутній) код символа Unicode (наприклад, "RangeError: Invalid code point NaN).RangeError
Опис
Цей метод вертає власне рядок, що належить до простого типу даних, а не об'єкт класу
.String
Позаяк fromCodePoint()
є статичним методом класу
, він зазвичай використовується як String
String.fromCodePoint()
, а не як метод створеного об'єкта класу.
Приклади
Використання fromCodePoint()
String.fromCodePoint(42); // "*"
String.fromCodePoint(65, 90); // "AZ"
String.fromCodePoint(0x404, 0x490); // "ЄҐ"
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() не може створювати символи з такими великими кодами
// Натомість fromCodePoint() може створювати символи, що передаються двома кодовими одиницями (чотири байти),
// так само, як і звичайні двобайтні (тобто може створити рядок, що містить один символ, але має довжину 2 замість 1).
console.log(String.fromCodePoint(0x2F804)); // Значення 194564 в десятковій системі числення
Запасний варіант (поліфіл)
Цей метод з'явився в ECMAScript 2015, тож, можливо, наявний не у всякій реалізації JavaScript. Проте, ви можете використати наступний код для забезпечення запасного варіанту:
/*! http://mths.be/fromcodepoint v0.1.0 by @mathias */
if (!String.fromCodePoint) {
(function() {
var defineProperty = (function() {
// IE 8 only supports `Object.defineProperty` on DOM elements
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`, or `-Infinity`
codePoint < 0 || // not a valid Unicode code point
codePoint > 0x10FFFF || // not a valid Unicode code point
floor(codePoint) != codePoint // not an integer
) {
throw RangeError('Invalid code point: ' + codePoint);
}
if (codePoint <= 0xFFFF) { // BMP code point
codeUnits.push(codePoint);
} else { // Astral code point; split in surrogate halves
// 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;
}
}());
}
Специфікації
Специфікація | Статус | Коментар |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'String.fromCodePoint' in that specification. |
Standard | Первинне визначення. |
ECMAScript (ECMA-262) The definition of 'String.fromCodePoint' in that specification. |
Living Standard |
Підтримка веб-переглядачами
BCD tables only load in the browser
Таблиця сумісності на цій сторінці створена зі структурованих даних. Якщо ви хочете долучитися до розробки цих даних, пропонуйте нам свої pull request до репозиторію https://github.com/mdn/browser-compat-data.