.indexOf()
ve .includes()
yöntemler, bir dizideki bir öğeyi aramak veya belirli bir dizede bir karakter / alt dizeyi aramak için kullanılabilir.
Dizide Kullanım
( ECMAScript Spesifikasyonuna Bağlantı )
indexOf
kullanan Katı eşitlik karşılaştırma iken, includes
kullanım SameValueZero algoritması. Bu nedenle aşağıdaki iki nokta farklılıklar ortaya çıkar.
Felix Kling'in belirttiği gibi , durumda davranış farklıdır NaN
.
let arr = [NaN];
arr.indexOf(NaN); // returns -1; meaning NaN is not present
arr.includes(NaN); // returns true
- Davranış olması durumunda da farklıdır
undefined
.
let arr = [ , , ];
arr.indexOf(undefined); // returns -1; meaning undefined is not present
arr.includes(undefined); // returns true
Dizede Kullanım
( ECMAScript Spesifikasyonuna Bağlantı )
- Bir RegExp'e iletirseniz
indexOf
, RegExp'i bir dize olarak değerlendirir ve bulunursa, dizenin dizinini döndürür. Ancak, bir RegExp'e iletirseniz includes
, bir istisna atar.
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
Verim
538ROMEO'nun işaret ettiği gibi , includes
biraz (çok küçük) biraz daha yavaş olabilir (çünkü ilk argüman olarak bir normal ifadeyi kontrol etmesi gerekir), indexOf
ancak gerçekte bu çok fazla fark yaratmaz ve ihmal edilebilir.
Tarih
String.prototype.includes()
ECMAScript 2015'te Array.prototype.includes()
tanıtıldı, ECMAScript 2016'da tanıtıldı. Tarayıcı desteği ile ilgili olarak, bunları akıllıca kullanın.
String.prototype.indexOf()
ve Array.prototype.indexOf()
ECMAScript'in ES5 sürümünde mevcuttur ve bu nedenle tüm tarayıcılar tarafından desteklenir.
includes
çok daha kötü tarayıcı desteğine sahip.