Apa cara yang benar untuk memeriksa kesetaraan antara String dalam JavaScript?
javascript
string
JSS
sumber
sumber
{} == "[object Object]"
bernilai true, misalnya.String().equals()
bukan metode di JS ...Jawaban:
SelaluSampai Anda sepenuhnya memahami perbedaan dan implikasi dari penggunaan==
dan===
operator, gunakan===
operator karena itu akan menyelamatkan Anda dari bug dan WTF yang tidak jelas (tidak jelas). Operator "biasa"==
dapat memiliki hasil yang sangat tidak terduga karena tipe-paksaan secara internal, jadi===
selalu menggunakan pendekatan yang direkomendasikan.Untuk mengetahui hal ini, dan bagian-bagian lain dari Javascript "baik vs. buruk" bacalah tentang Tn. Douglas Crockford dan karyanya. Ada Google Tech Talk yang hebat di mana ia merangkum banyak info bagus: http://www.youtube.com/watch?v=hQVTIJBZook
Memperbarui:
Seri You Don't Know JS oleh Kyle Simpson sangat bagus (dan gratis untuk dibaca online). Serial ini masuk ke bidang bahasa yang umumnya disalahpahami dan menjelaskan "bagian buruk" yang Crockford sarankan agar Anda hindari. Dengan memahami mereka, Anda dapat memanfaatkannya dengan benar dan menghindari jebakan.
Buku " Naik & Pergi " mencakup bagian tentang Kesetaraan , dengan ringkasan spesifik kapan harus menggunakan operator yang longgar (
==
) vs ketat (===
):Saya masih merekomendasikan ceramah Crockford untuk pengembang yang tidak ingin menginvestasikan waktu untuk benar-benar memahami Javascript — itu saran yang bagus untuk pengembang yang hanya sesekali bekerja di Javascript.
sumber
if (typeof foo == "string")
===
operator dan tidak perlu khawatir tentang "apakah saya benar-benar, 100% yakin yang==
akan berperilaku seperti yang saya pikirkan?"++
/--
).++
atau--
atauif/else
pernyataan garis tunggalcontinue
ataunew
operator atau sejumlah praktik kode sah lainnya yang dianggap "berbahaya" oleh Crockford. Dan tentu saja tidak pernah mempertimbangkan untuk menggunakaneval
atauwith
bahkan jika jebakan mereka dipahami dengan baik. Dan sudahkah Anda melihat versi JS selanjutnya? Sintaksis yang lebih ketat dan beberapa fungsi pembantu, beberapa yang telah beredar selama bertahun-tahun, adalah tentang semua yang kita dapatkan setelah sekian lama. Sintaksnya belum berevolusi sama sekali. Jika Crockford ada di balik ini, maka itu adalah hal yang buruk.Jika Anda tahu mereka adalah string, maka tidak perlu memeriksa jenisnya.
Namun, perhatikan bahwa objek string tidak akan sama.
akan kembali salah.
Panggil metode valueOf () untuk mengubahnya menjadi primitif untuk objek String,
akan mengembalikan true
sumber
new String("a") == "a"
itu benar (tetapi tidak akan dengan===
), karena sisi kiri akan dikonversi menjadi nilai string primitif.new String("a") == new String("a")
,new String("a") === new String("b")
,new String("a") === new String("a")
semua akan kembalifalse
, karena Anda sedang berhadapan dengan referensi ke objek dariString
kelas, tidak primitif dari jenisstring
.new String(foo)
membuat objek string , danString(foo)
mengonversi foo ke string primitif.Hanya satu tambahan untuk jawaban: Jika semua metode ini mengembalikan false, bahkan jika string tampaknya sama, ada kemungkinan spasi putih di sebelah kiri dan atau kanan satu string. Jadi, cukup beri tanda
.trim()
pada akhir string sebelum membandingkan:Saya kehilangan banyak waktu untuk mencari tahu apa yang salah. Semoga ini bisa membantu seseorang!
sumber
fetch
). Terima kasih banyak.apa yang mengarahkan saya ke pertanyaan ini adalah
padding
danwhite-spaces
periksa kasus saya
dan judulnya adalah
" LastName"
sumber
.toString().trim()
dalam naskahKecuali Anda benar-benar tahu cara kerja paksaan, Anda harus menghindari
==
dan menggunakan operator identitas===
sebagai gantinya. Tetapi Anda harus membaca ini untuk memahami cara kerjanya .Jika Anda menggunakan
==
, Anda membiarkan bahasa melakukan beberapa jenis paksaan untuk Anda, jadi misalnya:Seperti yang dikatakan Douglas Crockford dalam bukunya:
sumber
{}==" "
memberi sayaUnexpected token ==
apa cara yang benar untuk melakukannya?Sebenarnya ada dua cara di mana string dapat dibuat dalam javascript.
var str = 'Javascript';
Ini menciptakan nilai string primitif.var obj = new String('Javascript');
Ini menciptakan objek tipe pembungkusString
.typeof str // string
typeof obj // object
Jadi cara terbaik untuk memeriksa kesetaraan adalah menggunakan
===
operator karena memeriksa nilai serta jenis kedua operan.Jika Anda ingin memeriksa kesetaraan antara dua objek maka menggunakan
String.prototype.valueOf
adalah cara yang benar.sumber
String
Objects
dapat diperiksa menggunakanJSON.stringyfy()
trik.sumber
Mempertimbangkan bahwa kedua string mungkin sangat besar, ada 2 pendekatan utama
bitwise search
danlocaleCompare
Saya merekomendasikan fungsi ini
sumber
Cara termudah untuk melakukannya adalah dengan menggunakan operator ternary seperti:
tetapi jika string yang ingin Anda bandingkan ada dalam array, Anda akan menggunakan filter es6
di atas akan memeriksa stringArray Anda dan string apa pun yang cocok dengan itu dari array yang dalam kasus kami kami memilih "anak laki-laki"
sumber
Saya datang dengan solusi alternatif selama pengujian. Anda dapat menggunakan fungsi pada prototipe string.
berfungsi dengan baik di browser chrome
sumber
==
.