indexOf JavaScript - Używaj mądrze! Uniknij pułapek

Oliwier Król .

21 lutego 2026

Fragment kodu JavaScript, gdzie `indexOf` może być użyty do znalezienia pozycji elementu.

Metoda indexOf to jeden z tych elementów JavaScriptu, które szybko stają się codziennym narzędziem przy pracy z tablicami i tekstem. Pozwala znaleźć pierwsze wystąpienie wartości albo fragmentu napisu, ale ma też kilka ważnych ograniczeń, które łatwo przeoczyć w kodzie front-endowym. W tym artykule pokazuję, jak korzystać z niej poprawnie, kiedy daje najlepszy efekt i gdzie rozsądniej wybrać inne rozwiązanie.

Najważniejsze fakty o metodzie `indexOf`

  • Zwraca pierwszy indeks trafienia albo -1, gdy nic nie pasuje.
  • W tablicach porównuje wartości przez ścisłą równość, więc nie znajdzie NaN.
  • W napisach szuka pierwszego wystąpienia podciągu i przyjmuje opcjonalną pozycję startową.
  • Parametr startowy działa inaczej przy wartościach ujemnych i zbyt dużych.
  • Do samej obecności często lepsze jest includes, a do warunku opartego na funkcji - findIndex.

Jak działa metoda indexOf w tablicach i napisach

Najkrócej ujmując, indexOf odpowiada na pytanie: gdzie znajduje się pierwsze dopasowanie. W tablicy szuka konkretnej wartości, a w napisie - konkretnego ciągu znaków. Wynik jest zawsze oparty o indeksowanie od zera, więc pierwszy element ma pozycję 0, a brak dopasowania oznacza -1.

W praktyce to ważne rozróżnienie, bo zachowanie metody zależy od typu danych. Dla tablic porównanie odbywa się przez ścisłą równość, czyli tak jak przy ===. Dla tekstu metoda działa jak wyszukiwarka fragmentu w łańcuchu znaków, bez analizowania podobieństwa czy odmian słów.

Wariant Co przeszukuje Co zwraca Najważniejsza cecha
Tablica Pojedyncze elementy Indeks lub -1 Porównanie przez ścisłą równość
Napis Fragment tekstu Pozycję pierwszego wystąpienia lub -1 Szukanie podciągu znaków
Wynik Nie dotyczy Indeks od 0 wzwyż albo -1 -1 oznacza brak trafienia, nie ostatni element

Ja traktuję tę metodę jako narzędzie do szybkiego, pierwszego trafienia. Jeśli potrzebuję bardziej złożonego warunku, zwykle od razu myślę o innych rozwiązaniach. To prowadzi naturalnie do pytania: jak używać jej tak, żeby kod był czytelny i bezpieczny.

Jak używać jej poprawnie w kodzie

W codziennej pracy najczęściej spotykam trzy scenariusze: wyszukiwanie w tablicy, wyszukiwanie w napisie i zawężanie zakresu od konkretnej pozycji. Każdy z nich wygląda podobnie, ale różnice są na tyle istotne, że warto je rozdzielić.

W tablicy

const tags = ["seo", "ux", "javascript", "performance"];

const index = tags.indexOf("javascript");

if (index !== -1) {
  console.log(`Tag znajduje się pod indeksem ${index}`);
} else {
  console.log("Tag nie został znaleziony");
}

To najprostszy i najczęstszy przypadek. Wyszukujesz dokładną wartość, a potem sprawdzasz, czy wynik nie jest równy -1. Taki zapis jest ważny, bo indeks 0 jest poprawnym wynikiem, ale jednocześnie jest wartością fałszywą w warunku if.

W napisie

const text = "Garmax pomaga budować strony internetowe, e-commerce i SEO";

const position = text.indexOf("strony");

if (position !== -1) {
  console.log(`Fragment zaczyna się od pozycji ${position}`);
}

W tekście metoda zwraca pozycję pierwszego wystąpienia szukanego fragmentu. To przydaje się przy podświetlaniu słowa w treści, wycinaniu kawałka stringa albo sprawdzaniu, czy w adresie URL znajduje się określony segment. W praktyce to jedno z najprostszych narzędzi do pracy z krótkimi i średnimi łańcuchami znaków.

Przeczytaj również: Radio buttony w HTML - jak je poprawnie budować i unikać błędów?

Z parametrem startowym

const items = ["home", "about", "blog", "contact", "blog"];

console.log(items.indexOf("blog"));     // 2
console.log(items.indexOf("blog", 3));  // 4
console.log(items.indexOf("home", 1));  // -1

Drugi argument pozwala zacząć wyszukiwanie od konkretnej pozycji. To przydaje się, gdy chcesz znaleźć kolejne wystąpienie tego samego elementu albo wznowić przeszukiwanie po wcześniejszym trafieniu. W napisach działa to podobnie, ale warto pamiętać, że ujemna pozycja startowa jest interpretowana inaczej niż w tablicach.

Jeżeli opanujesz te trzy warianty, większość typowych zastosowań przestaje być problemem. Dopiero wtedy wychodzą na wierzch pułapki, które najczęściej generują błędy w produkcyjnym kodzie.

Najczęstsze pułapki i ograniczenia

W indexOf najwięcej problemów nie robi sama składnia, tylko założenia, które developer dopisuje sobie w głowie. Właśnie tutaj pojawiają się błędy trudne do wyłapania na szybkim code review.

Sytuacja Co się dzieje Na co uważać
W tablicy szukasz NaN Metoda zwróci -1 NaN nie jest równe samo sobie przy porównaniu przez ===
Masz tablicę z pustymi slotami Puste miejsca są pomijane [1, , 3].indexOf(undefined) nie da trafienia
W napisie podajesz undefined Przeszukiwany jest tekst "undefined" Argument w stringach jest zamieniany na napis
Wynik to 0 To poprawny indeks, ale wartość jest fałszywa Nie testuj trafienia przez samą prawdę logiczną wyniku
fromIndex jest większy niż długość tablicy lub napisu Wyszukiwanie się nie rozpocznie Dostaniesz od razu -1

Najbardziej zdradliwe są dwa przypadki: NaN oraz indeks 0. Pierwszy wygląda jak normalna wartość liczbowa, ale nie daje się znaleźć przez indexOf. Drugi jest poprawnym trafieniem, lecz łatwo go błędnie odrzucić, jeśli ktoś napisze warunek w stylu if (index).

Gdy te ograniczenia są jasne, łatwiej zdecydować, czy indexOf jest najlepszym wyborem, czy tylko najprostszym z możliwych.

Fragment kodu JavaScript z warunkami `if/else if/else`. Sprawdza, czy kod jest testowany, wolny, czy wymaga dokumentacji. `js indexOf` nie występuje w tym kodzie.

Kiedy wybrać inną metodę zamiast indexOf

W praktyce bardzo często wybieram inną metodę nie dlatego, że indexOf jest zła, tylko dlatego, że inna lepiej pasuje do intencji kodu. To ważna różnica. Dobrze dobrane API zmniejsza liczbę warunków i ułatwia utrzymanie projektu.

Metoda Co zwraca Kiedy ma sens Ograniczenie
indexOf Indeks lub -1 Gdy szukasz dokładnej wartości albo fragmentu tekstu Nie opisuje warunku, tylko równość
includes true lub false Gdy interesuje Cię sama obecność elementu Nie podaje pozycji trafienia
findIndex Indeks lub -1 Gdy potrzebujesz warunku typu price > 100 albo sprawdzenia pola obiektu Wymaga funkcji zwrotnej i jest czytelny głównie przy złożonych kryteriach
lastIndexOf Ostatni indeks lub -1 Gdy chcesz znaleźć ostatnie wystąpienie Wciąż działa na dokładnym dopasowaniu

Jeśli potrzebujesz odpowiedzi „tak albo nie”, zwykle lepiej wygląda includes. Jeśli warunek jest logiczny i zależy od zawartości obiektu, wygrywa findIndex. Z kolei indexOf zostaje tam, gdzie wystarcza proste, dokładne wyszukanie - bez dodatkowego kodu i bez sztucznego komplikowania struktury.

Warto też pamiętać o jednym praktycznym szczególe: includes korzysta z porównania SameValueZero, więc potrafi znaleźć NaN, a indexOf nie. To jeden z tych niuansów, które robią realną różnicę w projektach, w których tablice zawierają dane liczbowe lub obliczone wartości.

Gdzie ta metoda naprawdę pomaga w projektach webowych

W projektach webowych indexOf najczęściej nie służy do „naukowego” wyszukiwania danych, tylko do bardzo konkretnej, codziennej roboty. I właśnie dlatego jest tak użyteczna. W e-commerce, CMS-ach i prostych panelach administracyjnych pojawia się częściej, niż wielu osobom się wydaje.

  • Sprawdzanie, czy tag, kategoria albo identyfikator produktu już istnieje w tablicy.
  • Podświetlanie frazy w treści artykułu, opisu produktu lub komunikatu systemowego.
  • Znajdowanie pozycji aktywnej zakładki w menu, filtrze albo breadcrumbs.
  • Wyszukiwanie fragmentów w slugach, adresach URL i parametrach nawigacyjnych.
  • Usuwanie duplikatów z prostych list, zanim dane trafią do UI.

W takich zastosowaniach ważna jest nie tylko prostota, ale też koszt. indexOf przeszukuje dane liniowo, więc przy małych i średnich kolekcjach to zwykle nie ma znaczenia. Jeżeli jednak w pętli wykonujesz to samo wyszukiwanie wiele razy na dużych zbiorach, lepiej zbudować pomocniczy indeks albo użyć Set. W przeciwnym razie kod zacznie działać poprawnie, ale coraz wolniej.

W praktyce najlepiej sprawdza się podejście: najpierw prosty odczyt przez indexOf, a dopiero potem optymalizacja, jeśli naprawdę widać obciążenie. To rozsądniejsze niż przenoszenie całej logiki na bardziej złożone struktury bez realnej potrzeby.

Jak nie pomylić trafienia z brakiem wyniku

Najczęstszy błąd przy pracy z tą metodą nie polega na złym wywołaniu, tylko na złym odczytaniu wyniku. -1 oznacza brak dopasowania, a 0 jest normalnym wynikiem. Ten detal potrafi zepsuć walidację formularza, logikę menu albo obsługę filtrów.

const selected = ["home", "blog", "kontakt"];
const index = selected.indexOf("home");

if (index !== -1) {
  console.log("Element istnieje");
}

To podejście jest bezpieczne, czytelne i nie pozostawia miejsca na nieporozumienia. Jeśli chcesz znaleźć wszystkie wystąpienia tego samego elementu, nie kończ pracy na pierwszym trafieniu - tylko iteruj dalej, przesuwając punkt startowy.

const text = "seo seo seo";
const positions = [];
let pos = text.indexOf("seo");

while (pos !== -1) {
  positions.push(pos);
  pos = text.indexOf("seo", pos + 1);
}

console.log(positions); // [0, 4, 8]

Jeżeli zapamiętasz jedną rzecz, niech będzie prosta: indexOf odpowiada na pytanie „gdzie jest pierwsze trafienie?”, a nie „czy coś pasuje do bardziej złożonego warunku”. To właśnie ta różnica decyduje o tym, czy kod będzie krótki i czytelny, czy tylko pozornie prosty.

FAQ - Najczęstsze pytania

Metoda indexOf służy do znajdowania pierwszego wystąpienia określonej wartości w tablicy lub fragmentu tekstu w ciągu znaków. Zwraca indeks znalezionego elementu (liczony od zera) lub -1, jeśli element nie zostanie znaleziony.
IndexOf zwraca indeks znalezionego elementu lub -1, natomiast includes zwraca wartość logiczną (true/false), informującą jedynie o obecności elementu. Includes jest też bardziej elastyczne, potrafiąc znaleźć NaN, czego indexOf nie potrafi.
Metoda findIndex jest lepszym wyborem, gdy potrzebujesz wyszukać element na podstawie bardziej złożonego warunku, np. sprawdzając właściwości obiektu w tablicy. indexOf służy do prostego porównania wartości przez ścisłą równość.
Nie, indexOf nie jest w stanie znaleźć wartości NaN w tablicy. Zawsze zwróci -1, ponieważ NaN nie jest równe samo sobie przy porównaniu przez ścisłą równość (===), której używa indexOf.
Wynik 0 oznacza, że szukany element został znaleziony na pierwszej pozycji w tablicy lub na początku ciągu znaków. Jest to prawidłowy indeks, a nie brak dopasowania, dlatego ważne jest, aby sprawdzać wynik za pomocą `!== -1`.
Oceń artykuł

Średnia: 0.0 / 5 · 0 ocen

Tagi

js indexof indexof w javascript indexof a includes indexof a findindex indexof w tablicach indexof w stringach
Autor Oliwier Król
Oliwier Król
Nazywam się Oliwier Król i od 9 lat zajmuję się tworzeniem stron internetowych, e-commerce oraz SEO. Moja przygoda z tymi tematami zaczęła się z ciekawości do technologii i chęci pomocy innym w osiąganiu ich celów online. Lubię wyjaśniać złożone zagadnienia w prosty sposób, aby każdy mógł zrozumieć, jak skutecznie wykorzystać potencjał internetu. W swojej pracy zawsze stawiam na dokładność i aktualność informacji. Staram się porównywać różne źródła, śledzić najnowsze trendy oraz organizować wiedzę w sposób przystępny. Piszę na tematy związane z optymalizacją stron, strategią marketingową w e-commerce oraz technikami SEO, aby pomóc czytelnikom lepiej nawigować w świecie cyfrowym. Moim celem jest dostarczanie wartościowych treści, które są nie tylko użyteczne, ale także zrozumiałe dla każdego.
Komentarze (0)
Dodaj komentarz