--- title: String.prototype.codePointAt() slug: Web/JavaScript/Reference/Global_Objects/String/codePointAt tags: - ECMAScript6 - Experimental - Expérimental(2) - JavaScript - Method - Prototype - Reference - Référence(2) - String translation_of: Web/JavaScript/Reference/Global_Objects/String/codePointAt ---
Метод codePointAt()
возвращает неотрицательное целое число, являющееся закодированным в UTF-16 значением кодовой точки.
str.codePointAt(pos)
pos
Если на указанной позиции нет элементов, будет возвращено значение {{jsxref("Global_Objects/undefined", "undefined")}}. Если суррогатная пара UTF-16 не начинается в позиции pos
, будет возвращено кодовое значение в позиции pos
.
codePointAt()
'ABC'.codePointAt(1); // 66 '\uD800\uDC00'.codePointAt(0); // 65536 'XYZ'.codePointAt(42); // undefined
Следующий полифил расширяет прототип строки определённой в ECMAScript 6 функцией codePointAt()
, если браузер не имеет её родной поддержки.
/*! http://mths.be/codepointat v0.1.0 от @mathias */ if (!String.prototype.codePointAt) { (function() { 'use strict'; // необходимо для поддержки методов `apply`/`call` с `undefined`/`null` 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) { // младшая часть суррогатной пары // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; } } return first; }; if (Object.defineProperty) { Object.defineProperty(String.prototype, 'codePointAt', { 'value': codePointAt, 'configurable': true, 'writable': true }); } else { String.prototype.codePointAt = codePointAt; } }()); }
Спецификация | Статус | Комментарии |
---|---|---|
{{SpecName('ES6', '#sec-string.prototype.codepointat', 'String.prototype.codePointAt')}} | {{Spec2('ES6')}} | Изначальное определение. |
Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Базовая поддержка | {{CompatChrome("41")}} | {{CompatGeckoDesktop("29")}} | 11 на Windows 10 Preview | {{CompatNo}} | {{CompatNo}} |
Возможность | Android | Chrome для Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базовая поддержка | {{CompatNo}} | {{CompatNo}} | {{CompatGeckoMobile("29")}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |