String.prototype.codePointAt()

Это экспериментальная технология, часть предложения Harmony (ECMAScript 6).
Поскольку спецификация этой технологии ещё не стабилизировалась, проверьте таблицу совместимости её использования в различных браузерах. Также обратите внимание, что синтаксис и поведение экспериментальной технологии могут быть изменены в будущих версиях браузеров в соответствии с изменениями в спецификации.

Сводка

Метод codePointAt() возвращает неотрицательное целое число, являющееся закодированным в UTF-16 значением кодовой точки.

Синтаксис

str.codePointAt(pos)

Параметры

pos
Позиция элемента в строке, чья кодовоя точка возвращается функцией.

Описание

Если на указанной позиции нет элементов, будет возвращено значение 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;
    }
  }());
}

Спецификации

Спецификация Статус Комментарии
ECMAScript 6 (ECMA-262)
Определение 'String.prototype.codePointAt' в этой спецификации.
Кандидат в рекомендации Изначальное определение.

Совместимость с браузерами

Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка 41 29 (29) 11 на Windows 10 Preview Нет Нет
Возможность Android Chrome для Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка Нет Нет 29.0 (29) Нет Нет Нет

Смотрите также

Метки документа и участники

 Внесли вклад в эту страницу: Mingun
 Обновлялась последний раз: Mingun,