Web/JavaScript/Reference/Global objects/String/codePointAt
The codePointAt() method returns a non-negative integer that is the Unicode code point value.
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.
Syntax
str.codePointAt(pos)
Parameters
pos- Position of an element in
strto 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
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.
Update compatibility data on GitHub
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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' From version 0.12: this feature is behind the |
Legend
- Full support
- Full support
- No support
- No support
- User must explicitly enable this feature.'
- User must explicitly enable this feature.
See also
String.fromCodePoint()String.fromCharCode()String.prototype.charCodeAt()String.prototype.charAt()
String.prototype.codePointAt() by Mozilla Contributors is licensed under CC-BY-SA 2.5.