Selain keterbacaan yang lebih baik, apakah ada keuntungan includes
lebih dari itu indexOf
? Mereka tampak identik dengan saya.
Apa perbedaan antara ini
var x = [1,2,3].indexOf(1) > -1; //true
Dan ini?
var y = [1,2,3].includes(1); //true
javascript
ecmascript-7
Matt
sumber
sumber
includes
memiliki dukungan browser yang jauh lebih buruk.includes
itu bukan bagian dari ES6 / ES2015. Ini adalah proposal untuk versi ECMAScript berikutnya dan akan ditambahkan tahun ini.includes
TIDAK didukung di IE sama sekaliJawaban:
tl; dr:
NaN
diperlakukan berbeda:[NaN].indexOf(NaN) > -1
adalahfalse
[NaN].includes(NaN)
adalahtrue
Dari proposal :
Informasi lebih lanjut:
SameValueZero
algoritmaStrict Equality Comparison
algoritmasumber
undefined
oleh.includes()
dan tidak dianggap oleh.indexOf()
.Jika Anda bertanya-tanya tentang kinerja, untuk saat ini, indexOf lebih cepat, tetapi tes JSperf ini cenderung menunjukkan bahwa lebih banyak waktu berlalu, lebih banyak
includes()
akan lebih cepat daripadaindexOf
(saya kira itu akan dioptimalkan lebih lanjut).IMHO, saya juga lebih suka menulis
if (arr.includes(el)) {}
karena lebih jelas dan lebih mudah dirawat daripadaif (arr.indexOf(el) !== -1) {}
sumber
.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 sedangkanincludes
menggunakan algoritma SameValueZero . Karena alasan inilah, dua poin perbedaan berikut muncul.Seperti yang dikemukakan Felix Kling , perilakunya berbeda dalam kasus
NaN
.undefined
.Penggunaan dalam String
( Tautan ke Spesifikasi ECMAScript)
indexOf
, itu akan memperlakukan RegExp sebagai string dan akan mengembalikan indeks string, jika ditemukan. Namun, jika Anda meneruskan RegExp keincludes
, itu akan memunculkan pengecualian.Performa
Seperti yang 538ROMEO tunjukkan,
includes
mungkin sedikit (sangat kecil) sedikit lebih lambat (karena perlu memeriksa regex sebagai argumen pertama) daripadaindexOf
tetapi pada kenyataannya, ini tidak membuat banyak perbedaan dan dapat diabaikan.Sejarah
String.prototype.includes()
diperkenalkan di ECMAScript 2015 sedangkanArray.prototype.includes()
diperkenalkan di ECMAScript 2016. Sehubungan dengan dukungan browser, gunakan dengan bijak.String.prototype.indexOf()
danArray.prototype.indexOf()
hadir dalam ECMAScript edisi ES5 dan karenanya didukung oleh semua browser.sumber
indexOf
memberikantrue
setelah secara eksplisit mengaturundefined
ke dalam array:let arr=[undefined];
ataulet arr=[];arr[0]=undefined;
Sekarangarr.indexOf(undefined) === 0
undefined
: Alasannya adalah yang.includes
memperlakukan elemen yang hilang sebagaiundefined
, sambil.indexOf()
mengabaikannya. Anda juga dapat "membuat" elemen yang hilang denganarr[number beyond length] = whatever
..includes()
hanya makan string. Pada kenyataannya kedua metode memaksa apa pun menjadi string sebaik mungkin. Regex secara khusus dikecualikan sebagai argumen untuk.includes()
ke memungkinkan untuk penambahan masa depan dengan standar sesuai dengan rancangan saat ini.Secara konseptual Anda harus menggunakan indexOf ketika Anda ingin menggunakan posisi indexOf hanya memberikan Anda untuk mengekstrak nilai atau beroperasi di atas array, yaitu menggunakan slice, shift atau split setelah Anda mendapatkan posisi elemen. Di sisi lain, Use Array.includes hanya untuk mengetahui apakah nilainya ada di dalam array dan bukan posisinya karena Anda tidak mempedulikannya.
sumber
indexOf()
danincludes()
keduanya dapat digunakan untuk menemukan elemen dalam larik, namun setiap fungsi menghasilkan nilai pengembalian yang berbeda.indexOf
mengembalikan angka (-1
jika elemen tidak ada dalam array, atau posisi array jika elemen ada).includes()
mengembalikan nilai boolean (true
ataufalse
).sumber