1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
---
title: String.prototype.codePointAt()
slug: Web/JavaScript/Reference/Global_Objects/String/codePointAt
tags:
- ECMAScript 2015
- JavaScript
- String
- метод
translation_of: Web/JavaScript/Reference/Global_Objects/String/codePointAt
---
<div>{{JSRef}}</div>
<p>Метод <strong><code>codePointAt()</code></strong> вертає невід'ємне ціле число, яке є значенням коду символу Юнікоду.</p>
<div>{{EmbedInteractiveExample("pages/js/string-codepointat.html","shorter")}}</div>
<h2 id="Синтаксис">Синтаксис</h2>
<pre class="syntaxbox"><code><var>str</var>.codePointAt(<var>pos</var>)</code></pre>
<h3 id="Параметри">Параметри</h3>
<dl>
<dt><code><var>pos</var></code></dt>
<dd>Позиція елемента у <code><var>str</var></code><var>,</var> код символа з якої треба повернути.</dd>
</dl>
<h3 id="Значення_що_повертається">Значення, що повертається</h3>
<p>Число, що відображає значення коду символу з наданої позиції <code><var>pos</var></code>. Якщо на позиції <code>pos</code> немає елемента, вертається {{jsxref("undefined")}}.</p>
<h2 id="Опис">Опис</h2>
<p>Якщо на вказаній позиції немає елемента, повертається {{jsxref("undefined")}}. Якщо на позиції <code><var>pos</var></code> не починається сурогатна пара UTF-16, то повертається кодова одиниця позиції <code><var>pos</var></code>.</p>
<h2 id="Приклади">Приклади</h2>
<h3 id="Використання_codePointAt">Використання <code>codePointAt()</code></h3>
<pre class="brush: js">'ABC'.codePointAt(1) // 66
'\uD800\uDC00'.codePointAt(0) // 65536
'XYZ'.codePointAt(42) // undefined
</pre>
<h3 id="Цикл_з_codePointAt">Цикл з <code>codePointAt()</code></h3>
<pre class="brush: js"><code class="md-code md-lang-javascript"><span class="md-code-keyword">for</span> (<span class="md-code-keyword">let</span> codePoint of <span class="md-code-string">'\ud83d\udc0e\ud83d\udc71\u2764'</span>) {
<span class="md-code-built_in">console</span>.log(codePoint<mark class="md-mark md-code-mark">.codePointAt(<span class="md-code-number">0</span>).toString(<span class="md-code-number">16</span>)</mark>)
}
// <span class="md-code-comment">'1f40e', '1f471', '2764</span></code>'<code class="md-code md-lang-javascript"><span class="md-code-comment"> </span></code>
</pre>
<h2 id="Поліфіл">Поліфіл</h2>
<p>Наступний код додає у рядки функцію <code>codePointAt()</code> згідно специфікації ECMAScript 2015 для переглядачів без вбудованої підтримки.</p>
<pre class="brush: js">/*! 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;
}
}());
}
</pre>
<h2 id="Специфікації">Специфікації</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Специфікація</th>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-string.prototype.codepointat', 'String.prototype.codePointAt')}}</td>
</tr>
</tbody>
</table>
<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2>
<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
<p>{{Compat("javascript.builtins.String.codePointAt")}}</p>
<h2 id="Див._також">Див. також</h2>
<ul>
<li>{{jsxref("String.fromCodePoint()")}}</li>
<li>{{jsxref("String.fromCharCode()")}}</li>
<li>{{jsxref("String.prototype.charCodeAt()")}}</li>
<li>{{jsxref("String.prototype.charAt()")}}</li>
</ul>
|