.indexOf()
dan .includes()
metode dapat digunakan untuk mencari elemen dalam array atau untuk mencari karakter / substring dalam string tertentu.
Penggunaan di Array
( Tautan ke Spesifikasi ECMAScript)
indexOf
menggunakan Perbandingan Persamaan Ketat sedangkan includes
menggunakan algoritma SameValueZero . Karena alasan inilah, dua poin perbedaan berikut muncul.
Seperti yang dikemukakan Felix Kling , perilakunya berbeda dalam kasus NaN
.
let arr = [NaN];
arr.indexOf(NaN); // returns -1; meaning NaN is not present
arr.includes(NaN); // returns true
- Perilaku ini juga berbeda dalam kasus
undefined
.
let arr = [ , , ];
arr.indexOf(undefined); // returns -1; meaning undefined is not present
arr.includes(undefined); // returns true
Penggunaan dalam String
( Tautan ke Spesifikasi ECMAScript)
- Jika Anda meneruskan RegExp ke
indexOf
, itu akan memperlakukan RegExp sebagai string dan akan mengembalikan indeks string, jika ditemukan. Namun, jika Anda meneruskan RegExp ke includes
, itu akan memunculkan pengecualian.
let str = "javascript";
str.indexOf(/\w/); // returns -1 even though the elements match the regex because /\w/ is treated as string
str.includes(/\w/); // throws TypeError: First argument to String.prototype.includes must not be a regular expression
Performa
Seperti yang 538ROMEO tunjukkan,includes
mungkin sedikit (sangat kecil) sedikit lebih lambat (karena perlu memeriksa regex sebagai argumen pertama) daripada indexOf
tetapi pada kenyataannya, ini tidak membuat banyak perbedaan dan dapat diabaikan.
Sejarah
String.prototype.includes()
diperkenalkan di ECMAScript 2015 sedangkan Array.prototype.includes()
diperkenalkan di ECMAScript 2016. Sehubungan dengan dukungan browser, gunakan dengan bijak.
String.prototype.indexOf()
dan Array.prototype.indexOf()
hadir dalam ECMAScript edisi ES5 dan karenanya didukung oleh semua browser.
includes
memiliki dukungan browser yang jauh lebih buruk.