Apa cara yang benar untuk memeriksa kesetaraan antara String dalam JavaScript?
{} == "[object Object]"
bernilai true, misalnya.
String().equals()
bukan metode di JS ...
Apa cara yang benar untuk memeriksa kesetaraan antara String dalam JavaScript?
{} == "[object Object]"
bernilai true, misalnya.
String().equals()
bukan metode di JS ...
Jawaban:
Selalu Sampai 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 ( ===
):
Untuk merinci banyak detail menjadi beberapa takeaways sederhana, dan membantu Anda mengetahui apakah akan digunakan
==
atau===
dalam berbagai situasi, berikut adalah aturan sederhana saya:
- Jika salah satu nilai (alias sisi) dalam suatu perbandingan dapat berupa
true
ataufalse
nilainya, hindari==
dan gunakan===
.- Jika salah satu nilai dalam perbandingan bisa menjadi nilai-nilai tertentu tersebut (
0
,""
, atau[]
- array kosong), menghindari==
dan penggunaan===
.- Dalam semua kasus lain, Anda aman digunakan
==
. Tidak hanya aman, tetapi dalam banyak kasus ini menyederhanakan kode Anda dengan cara yang meningkatkan keterbacaan.
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.
if (typeof foo == "string")
===
operator dan tidak perlu khawatir tentang "apakah saya benar-benar, 100% yakin yang ==
akan berperilaku seperti yang saya pikirkan?"
++
/ --
).
++
atau --
atau if/else
pernyataan garis tunggal continue
atau new
operator atau sejumlah praktik kode sah lainnya yang dianggap "berbahaya" oleh Crockford. Dan tentu saja tidak pernah mempertimbangkan untuk menggunakan eval
atau with
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.
"a" == "b"
Namun, perhatikan bahwa objek string tidak akan sama.
new String("a") == new String("a")
akan kembali salah.
Panggil metode valueOf () untuk mengubahnya menjadi primitif untuk objek String,
new String("a").valueOf() == new String("a").valueOf()
akan mengembalikan true
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 kembali false
, karena Anda sedang berhadapan dengan referensi ke objek dari String
kelas, tidak primitif dari jenis string
.
new String(foo)
membuat objek string , dan String(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:
if(s1.trim() === s2.trim())
{
// your code
}
Saya kehilangan banyak waktu untuk mencari tahu apa yang salah. Semoga ini bisa membantu seseorang!
fetch
). Terima kasih banyak.
apa yang mengarahkan saya ke pertanyaan ini adalah padding
danwhite-spaces
periksa kasus saya
if (title === "LastName")
doSomething();
dan judulnya adalah " LastName"
jadi mungkin Anda harus menggunakan
trim
fungsi seperti ini
var title = $(this).text().trim();
.toString().trim()
dalam naskah
Kecuali 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:
"1" == 1 // true
"0" == false // true
[] == false // true
Seperti yang dikatakan Douglas Crockford dalam bukunya:
Itu selalu lebih baik menggunakan operator identitas.
{}==" "
memberi saya Unexpected 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 pembungkus String
.
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.
new String('javascript').valueOf() == new String('javascript').valueOf()
String Objects
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);
Cara termudah untuk melakukannya adalah dengan menggunakan operator ternary seperti:
"was" == "was" ? true : false
tetapi jika string yang ingin Anda bandingkan ada dalam array, Anda akan menggunakan filter es6
let stringArray = ["men", "boys", "girls", "sit", "can", "gotten"]
stringArray.filter(I=> I === boys ?
stringArray.pop(indexOf(I)) : null)
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"
Saya datang dengan solusi alternatif selama pengujian. Anda dapat menggunakan fungsi pada prototipe string.
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
berfungsi dengan baik di browser chrome
==
.