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
143
144
145
146
147
148
149
150
151
152
153
154
|
---
title: String.prototype.indexOf()
slug: Web/JavaScript/Reference/Global_Objects/String/indexOf
tags:
- JavaScript
- Prototype
- String
- Довідка
- метод
translation_of: Web/JavaScript/Reference/Global_Objects/String/indexOf
---
<div>{{JSRef}}</div>
<p>Метод <strong><code>indexOf()</code></strong> починає пошук від символа за індексом <code>fromIndex</code> всередині об'єкта <code>{{jsxref("String")}}</code>, з якого здійснюється виклик метода, і вертає індекс першого знайденого збігу із шуканим значенням. Якщо значення не знайдене, повертає <code>-1</code>.</p>
<p>{{EmbedInteractiveExample("pages/js/string-indexof.html")}}</p>
<div class="hidden">
<p>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 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
</div>
<div class="note"><strong>Заувага:</strong> Клас <code>Array</code> має подібний метод <code>{{jsxref("Array.prototype.indexOf()", "indexOf()")}}</code>.</div>
<h2 id="Синтаксис">Синтаксис</h2>
<pre class="syntaxbox"><var>str</var>.indexOf(<var>searchValue</var>[, <var>fromIndex</var>])</pre>
<h3 id="Параметри">Параметри</h3>
<dl>
<dt><em><code>searchValue</code></em></dt>
<dd>Рядок, що є шуканим значенням.</dd>
<dd>Якщо рядок явно не заданий, <a href="https://tc39.github.io/ecma262/#sec-tostring"><var>searchValue</var> буде примусово приведений до <code>"undefined"</code></a>, і пошук цього значення буде здійснюватись у <code><var>str</var></code>.</dd>
<dd>Отже, для прикладу: <code>'undefined'.indexOf()</code> поверне <code>0</code>, оскільки значення undefined знайдене на позиції <code>0</code>, але <code>'undefine'.indexOf()</code> поверне <code>-1</code>, оскільки рядок <code>"undefine"</code> не знайдений.</dd>
<dt><em><code>fromIndex</code> </em>{{optional_inline}}</dt>
<dd>Ціле число, що позначає індекс, з якого має розпочинатися пошук; за замовчуванням дорівнює <code>0</code>.</dd>
<dd>Якщо вказане значення <code>fromIndex</code> менше за <code>0</code> чи більше за <code>str.length</code>, пошук розпочнеться з індексу <code>0</code> та <code>str.length</code>, відповідно.</dd>
<dd>Для прикладу, <code>'всім привіт'.indexOf('м', -5)</code> поверне <code>3</code>, оскільки метод почне пошук з позициї <code>0</code>, а <code>м</code> знайдеться на позиції <code>3</code>. З іншого боку, <code>'всім привіт'.indexOf('м', 11)</code> (і з будь-яким значенням <code>fromIndex</code>, більшим за <code>11</code>) поверне <code>-1</code>, оскільки пошук починається з позиції <code>11</code>, позиції <em>після</em> кінця рідка.</dd>
</dl>
<h3 id="Вертає">Вертає</h3>
<p>Індекс першого знайденого збігу з <em><code>searchValue</code></em>, або <strong><code>-1</code></strong>, якщо жодного збігу не знайдено.</p>
<p>Порожній рядок <code><var>searchValue</var></code> призводить до дивних результатів. За відсутності значення <code><var>fromIndex</var></code>, чи будь-якого значення <em><code>fromIndex</code></em>, нижчого за довжину рядка, повернене значення буде таким самим, як значення <code><var>fromIndex</var></code>:</p>
<pre class="brush: js">'всім привіт'.indexOf('') // вертає 0
'всім привіт'.indexOf('', 0) // вертає 0
'всім привіт'.indexOf('', 3) // вертає 3
'всім привіт'.indexOf('', 8) // вертає 8</pre>
<p>Однак, якщо значення <code><var>fromIndex</var></code> є рівним або більшим за довжину рядка, повернене значення <em>дорівнює</em> довжині рядка:</p>
<pre class="brush: js">'всім привіт'.indexOf('', 11) // вертає 11
'всім привіт'.indexOf('', 13) // вертає 11
'всім привіт'.indexOf('', 22) // вертає 11</pre>
<p>В минулій версії JS порожній рядок відшукувався одразу після вказаного значення індексу. У останній версії JS порожній рядок буде знайдений в кінці рядка, в якому здійснюється пошук.</p>
<h2 id="Опис">Опис</h2>
<p>Символи рядка індексуються зліва направо. Індекс першого символу дорівнює <code>0</code>, а індекс останнього символу рядка <code><em>stringName</em></code> дорівнює <code><em>stringName</em>.length - 1</code>.</p>
<pre class="brush: js">'Непозбувна бентега'.indexOf('Непозбувна'); // вертає 0
'Непозбувна бентега'.indexOf('Непозбувний'); // вертає -1
'Непозбувна бентега'.indexOf('бентега', 0); // вертає 11
'Непозбувна бентега'.indexOf('бентега', 5); // вертає 11
'Непозбувна бентега'.indexOf('бентега', 12); // вертає -1
'Розкішниця'.indexOf(''); // вертає 0
'Розкішниця'.indexOf('', 9); // вертає 9
'Розкішниця'.indexOf('', 10); // вертає 10
'Розкішниця'.indexOf('', 11); // вертає 10</pre>
<p>Метод <code>indexOf()</code> є регістрозалежним. Наприклад, вираз нижче повертає <code>-1</code>:</p>
<pre class="brush: js">'Непозбувна бентега'.indexOf('Бентега'); // вертає -1
</pre>
<h3 id="Перевірка_наявності_підрядка">Перевірка наявності підрядка</h3>
<p>Зважте на те, що <code>0</code> не обчислюється як <code>true</code>, а <code>-1</code> не обчислюється як <code>false</code>. Отже, належить у явний спосіб порівнювати значення, що повертається методом <code>indexOf()</code>, зі значенням <code>-1</code>:</p>
<pre class="brush: js">'Непозбувна бентега'.indexOf('бентега') !== -1; // true
'Непозбувна бентега'.indexOf('Бентега') !== -1; // false
~('Непозбувна бентега'.indexOf('Непозбувний')) // 0, тобто, хибне значення</pre>
<h2 id="Приклади">Приклади</h2>
<h3 id="Використання_indexOf">Використання <code>indexOf()</code></h3>
<p>Наступний приклад використовує <code>indexOf()</code>, щоб знайти значення у рядку <code>"абабагаламага"</code>.</p>
<pre class="brush: js">const str = '<code>абабагаламага</code>'
console.log('Індекс першої г з початку дорівнює ' + str.indexOf('г')) // виводить 5
console.log('Індекс "баба" з початку дорівнює ' + str.indexOf('баба')) // виводить 1</pre>
<h3 id="Регістрозалежність_метода_indexOf">Регістрозалежність метода <code>indexOf()</code></h3>
<p>В цьому прикладі наведено два текстових рядки.</p>
<p>Їх вміст є майже однаковим, але у <code>myCapString</code> слова починаються з великої літери. Перший метод <a href="/uk/docs/Web/API/Console/log" title="The Console method log() outputs a message to the web console."><code>console.log()</code></a> виводить <code>13</code>. Але, через те, що метод <code>indexOf()</code> чутливий до регістру, рядок <code>"камамбер"</code> не знаходиться у <code>myCapString</code>, а отже, другий метод <code>console.log()</code> виводить <code>-1</code>.</p>
<pre class="brush: js">var myString = 'брі, дорблю, камамбер';
var myCapString = 'Брі, Дорблю, Камамбер';
console.log('myString.indexOf("камамбер") дорівнює ' + myString.indexOf('камамбер'))
// виводить 13
console.log('myCapString.indexOf("камамбер") дорівнює ' + myCapString.indexOf('камамбер'))
// виводить -1</pre>
<h3 id="Використання_indexOf_для_підрахунку_кількості_вживань_літери_у_рядку">Використання <code>indexOf()</code> для підрахунку кількості вживань літери у рядку</h3>
<p>Наступний приклад присвоює змінній <code>count</code> число вживать літери <code>с</code> у рядку <code>str</code>:</p>
<pre class="brush: js">const str = 'Буває, часом сліпну від краси.'
let count = 0
let position = str.indexOf('с')
while (position !== -1) {
count++
position = str.indexOf('с', position + 1)
}
console.log(count) // виводить 3</pre>
<h2 id="Специфікації">Специфікації</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Специфікація</th>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-string.prototype.indexof', 'String.prototype.indexOf')}}</td>
</tr>
</tbody>
</table>
<h2 id="Підтримка_веб-переглядачами">Підтримка веб-переглядачами</h2>
<div class="hidden">Таблиця сумісності на цій сторінці створена зі структурованих даних. Якщо ви хочете долучитися до розробки цих даних, пропонуйте нам свої pull request до репозиторію <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</div>
<p>{{Compat("javascript.builtins.String.indexOf")}}</p>
<h2 id="Див._також">Див. також</h2>
<ul>
<li>{{jsxref("String.prototype.charAt()")}}</li>
<li>{{jsxref("String.prototype.lastIndexOf()")}}</li>
<li>{{jsxref("String.prototype.includes()")}}</li>
<li>{{jsxref("String.prototype.split()")}}</li>
<li>{{jsxref("Array.prototype.indexOf()")}}</li>
</ul>
|