String.prototype.codePointAt()
Метод codePointAt()
вертає невід'ємне ціле число, яке є значенням коду символу Юнікоду.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Синтаксис
str.codePointAt(pos)
Параметри
pos
- Позиція елемента у
str
, код символа з якої треба повернути.
Значення, що повертається
Число, що відображає значення коду символу з наданої позиції pos
. Якщо на позиції pos
немає елемента, вертається undefined
.
Опис
Якщо на вказаній позиції немає елемента, повертається undefined
. Якщо на позиції pos
не починається сурогатна пара UTF-16, то повертається кодова одиниця позиції pos
.
Приклади
Використання codePointAt()
'ABC'.codePointAt(1) // 66
'\uD800\uDC00'.codePointAt(0) // 65536
'XYZ'.codePointAt(42) // undefined
Цикл з codePointAt()
for (let codePoint of '\ud83d\udc0e\ud83d\udc71\u2764') {
console.log(codePoint.codePointAt(0).toString(16))
}
// '1f40e', '1f471', '2764'
Поліфіл
Наступний код додає у рядки функцію codePointAt()
згідно специфікації ECMAScript 2015 для переглядачів без вбудованої підтримки.
/*! https://mths.be/codepointat v0.2.0 автор @mathias */
if (!String.prototype.codePointAt) {
(function() {
'use strict'; // необхідно для підтримки `apply`/`call` з `undefined`/`null`
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 codePointAt = function(position) {
if (this == null) {
throw TypeError();
}
var string = String(this);
var size = string.length;
// `ToInteger`
var index = position ? Number(position) : 0;
if (index != index) { // краще `isNaN`
index = 0;
}
// Врахування індексів за межами існуючих значень:
if (index < 0 || index >= size) {
return undefined;
}
// Отримати першу кодову одиницю
var first = string.charCodeAt(index);
var second;
if ( // перевірити, чи вона є початком сурогатної пари
first >= 0xD800 && first <= 0xDBFF && // високий сурогат
size > index + 1 // існує наступна кодова одиниця
) {
second = string.charCodeAt(index + 1);
if (second >= 0xDC00 && second <= 0xDFFF) { // низький сурогат
// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
}
}
return first;
};
if (defineProperty) {
defineProperty(String.prototype, 'codePointAt', {
'value': codePointAt,
'configurable': true,
'writable': true
});
} else {
String.prototype.codePointAt = codePointAt;
}
}());
}
Специфікації
Специфікація |
---|
ECMAScript (ECMA-262) The definition of 'String.prototype.codePointAt' in that specification. |
Сумісність з веб-переглядачами
BCD tables only load in the browser
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.