Apa cara yang benar untuk memeriksa kesetaraan antara String di JavaScript?
Untuk wawasan ini, dan lain-lain "baik vs buruk" bagian dari Javascript baca di Mr. Douglas Crockford dan pekerjaan-nya. Ada's besar Google Tech Talk di mana ia merangkum banyak info yang baik: [
Update:
The Anda Don't Tahu JS seri oleh Kyle Simpson adalah sangat baik (dan gratis untuk baca online). Seri ini masuk ke dalam sering disalahpahami bidang bahasa dan menjelaskan "makan" yang Crockford menyarankan anda hindari. Dengan memahami mereka, anda dapat membuat penggunaan yang tepat dari mereka dan menghindari perangkap.
&Quot;Up & Akan" buku termasuk bagian Kesetaraan, dengan ini spesifik ringkasan ketika menggunakan longgar (==
) vs ketat (===
) operator:
Sampai mendidih banyak rincian untuk beberapa sederhana takeaways, dan membantu anda mengetahui apakah akan menggunakan
==
atau===
dalam berbagai situasi, berikut ini adalah aturan sederhana:
- Jika salah satu nilai (alias side) dalam perbandingan yang bisa menjadi
true
ataufalse
nilai, menghindari==
dan menggunakan===
.- Jika salah satu nilai dalam perbandingan bisa jadi ini nilai-nilai tertentu (
0
,","
, atau[]
-- array kosong), menghindari==
dan menggunakan===
.- Di semua kasus lain, anda're aman untuk digunakan
==
. Tidak hanya lebih aman, tetapi dalam banyak kasus ini menyederhanakan kode anda dengan cara yang meningkatkan keterbacaan.
Saya masih merekomendasikan Crockford's talk untuk pengembang yang don't ingin menginvestasikan waktu untuk benar-benar memahami Javascript—it's nasihat yang baik untuk pengembang yang hanya kadang-kadang bekerja di Javascript.
Jika anda tahu mereka adalah string, maka ada's tidak perlu untuk memeriksa jenis.
"a" == "b"
Namun, perhatikan bahwa objek string tidak akan sama.
new String("a") == new String("a")
akan mengembalikan false.
Sebut valueOf() metode untuk mengkonversi ke primitif untuk objek String,
new String("a").valueOf() == new String("a").valueOf()
akan return true
Hanya satu selain jawaban: Jika semua metode ini kembali palsu, bahkan jika string tampaknya sama, adalah mungkin bahwa ada spasi ke kiri dan atau kanan suatu string. Jadi, hanya menempatkan .trim()
di akhir string sebelum membandingkan:
if(s1.trim() === s2.trim())
{
// your code
}
Saya telah kehilangan berjam-jam mencoba untuk mencari tahu apa yang salah. Berharap ini akan membantu untuk seseorang!
apa yang menyebabkan saya untuk pertanyaan ini adalah padding
dan putih-ruang
memeriksa kasus saya
if (title === "LastName")
doSomething();
dan judul itu " LastName"
jadi mungkin anda harus menggunakan fungsi
memotong
seperti ini
var title = $(this).text().trim();
Kecuali anda benar-benar tahu bagaimana pemaksaan bekerja, anda harus menghindari ==
dan menggunakan identitas operator ===
sebagai gantinya. Tapi anda harus baca ini untuk memahami cara kerjanya.
Jika anda menggunakan ==
, anda membiarkan bahasa melakukan beberapa jenis paksaan untuk anda, jadi misalnya:
"1" == 1 // true
"0" == false // true
[] == false // true
Sebagai Douglas Crockford's mengatakan dalam bukunya:
Itu selalu lebih baik menggunakan identitas operator.
Sebenarnya ada dua cara di mana string dapat dibuat dalam javascript.
var str = 'Javascript';
Ini menciptakan primitif nilai string.
var obj = new String('Javascript');
Ini menciptakan pembungkus objek
tipe String
.
typeof str // string
typeof obj // objek
Jadi cara terbaik untuk memeriksa kesetaraan menggunakan ===
operator karena itu pemeriksaan nilai serta jenis kedua operan.
Jika anda ingin memeriksa kesetaraan antara dua benda maka menggunakan String.prototipe.valueOf
adalah cara yang benar.
new String('javascript').valueOf() == new String('javascript').valueOf()
String Benda
dapat diperiksa menggunakan JSON.stringyfy()
trik.
var me = new String("me");
var you = new String("me");
var isEquel = JSON.stringify(me) === JSON.stringify(you);
console.log(isEquel);
Aku datang dengan solusi alternatif selama pengujian. anda dapat menggunakan fungsi pada string prototipe.
String.prototype.betwenStr = function(one){
return JSON.stringify(new String(this)) === JSON.stringify(new String(one));
}
//call it
"hello world".betweenStr("hello world"); //returns boolean
//value
bekerja dengan baik di chrome browser