Web/JavaScript/Reference/Global objects/String/codePointAt

From Get docs


The codePointAt() method returns a non-negative integer that is the Unicode code point value.


Syntax

str.codePointAt(pos)

Parameters

pos
Position of an element in str to return the code point value from.

Return value

A number representing the code point value of the character at the given pos. If there is no element at pos, returns undefined.

Description

If there is no element at the specified position, undefined is returned. If no UTF-16 surrogate pair begins at pos, the code unit at pos is returned.

Examples

Using codePointAt()

'ABC'.codePointAt(1)           // 66
'\uD800\uDC00'.codePointAt(0)  // 65536

'XYZ'.codePointAt(42)          // undefined

Looping with codePointAt()

for (let codePoint of '\ud83d\udc0e\ud83d\udc71\u2764') {
   console.log(codePoint.codePointAt(0).toString(16)) 
} 
// '1f40e', '1f471', '2764'

Polyfill

The following extends Strings to include the codePointAt() function as specified in ECMAScript 2015 for browsers without native support.

/*! https://mths.be/codepointat v0.2.0 by @mathias */
if (!String.prototype.codePointAt) {
  (function() {
    'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
    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 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) { // better `isNaN`
        index = 0;
      }
      // Account for out-of-bounds indices:
      if (index < 0 || index >= size) {
        return undefined;
      }
      // Get the first code unit
      var first = string.charCodeAt(index);
      var second;
      if ( // check if it’s the start of a surrogate pair
        first >= 0xD800 && first <= 0xDBFF && // high surrogate
        size > index + 1 // there is a next code unit
      ) {
        second = string.charCodeAt(index + 1);
        if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate
          // 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;
    }
  }());
}

Specifications

Specification
ECMAScript (ECMA-262)The definition of 'String.prototype.codePointAt' in that specification.

Browser compatibility

Update compatibility data on GitHub

Desktop Mobile Server
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet Node.js
codePointAt Chrome

Full support 41

Edge

Full support 12

Firefox

Full support 29

IE

No support No

Opera

Full support 28

Safari

Full support 10

WebView Android

Full support 41

Chrome Android

Full support 41

Firefox Android

Full support 29

Opera Android

Full support 28

Safari iOS

Full support 10

Samsung Internet Android

Full support 4.0

nodejs Full support 4.0.0


Full support 4.0.0


Full support 0.12

Disabled'

Disabled' From version 0.12: this feature is behind the --harmony runtime flag.

Legend

Full support  
Full support
No support  
No support
User must explicitly enable this feature.'
User must explicitly enable this feature.


See also