Hari ini saya mendapat komentar tentang kode mengingat cara saya memeriksa apakah variabel benar atau salah dalam tugas sekolah.
Kode yang saya tulis kira-kira seperti ini:
var booleanValue = true;
function someFunction(){
if(booleanValue === true){
return "something";
}
}
Mereka mengatakan lebih baik / rapi menulis seperti ini:
var booleanValue = true;
function someFunction(){
if(booleanValue){
return "something";
}
}
Pernyataan yang saya dapatkan tentang bagian "=== true" adalah bahwa itu tidak diperlukan dan dapat membuat kebingungan.
Namun ide saya adalah bahwa lebih baik untuk memeriksa apakah variabel tersebut boolean atau tidak, terutama karena Javascript adalah bahasa loosetyped.
Dalam contoh kedua string juga akan mengembalikan "sesuatu";
Jadi pertanyaan saya; Apakah lebih baik kehilangan bagian "=== true" di masa depan, atau apakah itu praktik yang baik untuk memeriksa jenis variabel juga.
Sunting: Dalam kode "asli" saya, boolean menunjukkan apakah suatu gambar telah dihapus atau tidak, jadi satu-satunya nilai yang harus dimiliki boolValue adalah benar atau salah.
0 dan 1 misalnya tidak boleh dalam variabel itu.
sumber
=== true
. Hindari kebingungan !![0] === true
mengevaluasi ke false.=== true
ketika Anda perlu memastikan bahwa kondisinya persis sama dengantrue
.Jawaban:
Pertama, fakta:
Akan memenuhi
if
pernyataan untuk setiap nilai kebenaranbooleanValue
termasuktrue
, setiap angka tidak nol, nilai string tidak kosong, objek atau array array apa pun, dll ...Di samping itu:
Ini hanya akan memenuhi
if
kondisi jikabooleanValue
sama persis dengantrue
. Tidak ada nilai kebenaran lain yang akan memuaskannya.Di sisi lain jika Anda melakukan ini:
Lalu, apa yang akan dilakukan Javascript adalah mengetikkan koersi
true
agar sesuai dengan tipesomeVar
dan kemudian membandingkan kedua variabel tersebut. Ada banyak situasi di mana ini kemungkinan tidak sesuai dengan keinginan seseorang. Karena itu, dalam kebanyakan kasus Anda ingin menghindari==
karena ada seperangkat aturan yang cukup panjang tentang bagaimana Javascript akan mengetik memaksa dua hal menjadi jenis yang sama dan kecuali Anda memahami semua aturan itu dan dapat mengantisipasi segala sesuatu yang mungkin dilakukan penerjemah JS ketika diberikan dua jenis berbeda (yang sebagian besar pengembang JS tidak bisa), Anda mungkin ingin menghindari==
seluruhnya.Sebagai contoh betapa membingungkannya hal itu:
Untuk nilainya
2
, Anda akan berpikir bahwa itu2
adalah nilai yang sebenarnya sehingga akan lebih baik dibandingkantrue
, tetapi itu bukanlah cara kerja paksaan tipe. Ini mengonversi nilai tangan kanan untuk mencocokkan jenis nilai tangan kiri sehingga mengkonversitrue
ke angka1
sehingga itu membandingkan2 == 1
yang tentu saja bukan yang Anda inginkan.Jadi, pembeli berhati-hatilah. Kemungkinan besar untuk menghindari
==
dalam hampir semua kasus kecuali jika Anda secara eksplisit tahu jenis yang akan Anda bandingkan dan tahu bagaimana semua jenis algoritma pemaksaan bekerja.Jadi, itu benar-benar tergantung pada nilai-nilai yang diharapkan
booleanValue
dan bagaimana Anda ingin kode berfungsi. Jika Anda tahu sebelumnya bahwa itu hanya pernah akan memilikitrue
ataufalse
nilai, kemudian membandingkannya secara eksplisit denganhanya kode tambahan dan tidak perlu dan
lebih kompak dan bisa dibilang lebih bersih / lebih baik.
Sebaliknya, jika Anda tidak tahu apa yang
booleanValue
mungkin terjadi dan ingin menguji apakah benar-benar diaturtrue
tanpa konversi tipe otomatis lainnya diizinkan, makabukan hanya ide yang bagus, tetapi juga dibutuhkan.
Misalnya, jika Anda melihat implementasi
.on()
di jQuery, ia memiliki nilai pengembalian opsional. Jika panggilan balik kembalifalse
, maka jQuery akan secara otomatis menghentikan penyebaran acara. Dalam kasus khusus ini, karena jQuery ingin propagasi berhenti hanya jikafalse
dikembalikan, mereka memeriksa nilai kembali eksplisit untuk=== false
karena mereka tidak inginundefined
atau0
atau""
atau apa pun yang akan secara otomatis ketik-convert ke false untuk juga memenuhi perbandingan.Misalnya, inilah acara jQuery yang menangani kode panggilan balik:
Anda dapat melihat bahwa jQuery mencari secara eksplisit
ret === false
.Tapi, ada juga banyak tempat lain di kode jQuery di mana pemeriksaan yang lebih sederhana sesuai diberikan keinginan kode. Sebagai contoh:
sumber
Jika Anda menulis:,
if(x === true)
Ini hanya berlaku untuk x = trueJika Anda menulis:,
if(x)
itu akan benar untuk setiap x yang bukan: '' (string kosong), false, null, undefined, 0, NaN.sumber
NaN
dan-0
.Dalam "jika" variabel akan dipaksa ke Boolean dan menggunakan toBoolean pada objek: -
Tetapi perbandingan dengan === tidak memiliki paksaan tipe apa pun, jadi mereka harus sama tanpa paksaan.
Jika Anda mengatakan bahwa objek tersebut mungkin bukan Boolean maka Anda mungkin harus mempertimbangkan lebih dari sekadar benar / salah.
sumber
Itu tergantung pada usecase Anda. Mungkin masuk akal untuk memeriksa jenisnya juga, tetapi jika itu hanya sebuah bendera, itu tidak benar.
sumber
===
perbandingan tidak melakukan jenis paksaan. Jadi kode OP secara efektif menguji jenis bendera. Itu hanya berhasil jika nilainya boolean dan benar.Secara umum, lebih bersih dan sederhana untuk menghilangkan
=== true
.Namun, dalam Javascript, pernyataan tersebut berbeda.
if (booleanValue)
akan mengeksekusi jikabooleanValue
adalah truthy - apa pun selain0
,false
,''
,NaN
,null
, danundefined
.if (booleanValue === true)
hanya akan mengeksekusi jikabooleanValue
sama dengantrue
.sumber
''
.(===)
Operator identitas berperilaku identik dengan(==)
operator persamaan kecuali tidak ada konversi jenis dilakukan, dan jenis harus sama agar dianggap sama.sumber
if (booleanValue)
danif (booleanValue==true)
saatbooleanValue
ini2
. Kedua pernyataan itu tidak memberi Anda hasil yang sama.Karena nilai yang dicentang
Boolean
itu lebih disukai untuk menggunakannya secara langsung untuk lebih sedikit pengkodean dan sama sekali melakukan hal yang sama==true
sumber
Karena Anda sudah diinisialisasi dengan jelas sebagai bool, saya pikir
===
operator tidak diperlukan.sumber
Jika variabel hanya bisa mengambil nilai boolean, maka masuk akal untuk menggunakan sintaks yang lebih pendek.
Jika berpotensi dapat ditugaskan jenis lain, dan Anda perlu membedakan
true
dari1
atau"foo"
, maka Anda harus menggunakannya=== true
.sumber
Saya pikir alasan Anda masuk akal. Tetapi dalam praktiknya saya telah menemukan bahwa jauh lebih umum untuk menghilangkan
===
perbandingan. Saya pikir ada tiga alasan untuk itu:undefined
ataunull
nilai tak terduga . Seringkali Anda hanya ingin tes Anda gagal dalam kasus seperti itu. (Meskipun saya mencoba menyeimbangkan pandangan ini dengan moto "gagal cepat").Pertimbangkan contoh ini:
Saya pikir kode semacam ini tidak jarang. Ini menangani kasus di mana
getInput()
pengembalianundefined
,null
atau string kosong. Karena dua evaluasi booleansubmitInput()
hanya dipanggil jika input yang diberikan adalah string yang berisi karakter non-spasi.Dalam JavaScript
&&
mengembalikan argumen pertama jika itu salah atau argumen kedua jika argumen pertama adalah benar; begitunormalized
jugaundefined
jikasomeString
tidak ditentukan dan sebagainya. Itu berarti bahwa tidak ada input ke ekspresi boolean di atas sebenarnya nilai boolean.Saya tahu bahwa banyak programmer yang terbiasa dengan jenis ngeri yang kuat ketika melihat kode seperti ini. Tetapi catatan menerapkan pengetikan yang kuat kemungkinan akan membutuhkan pemeriksaan eksplisit untuk
null
atauundefined
nilai yang , yang akan mengacaukan kode. Dalam JavaScript itu tidak diperlukan.sumber
Ini tergantung. Jika Anda khawatir bahwa variabel Anda bisa berakhir sebagai sesuatu yang berubah menjadi BENAR. Maka memeriksa sulit adalah suatu keharusan. Kalau tidak, itu terserah Anda. Namun, saya ragu bahwa sintaks
whatever == TRUE
akan pernah membingungkan siapa pun yang tahu apa yang mereka lakukan.sumber
Dalam Javascript ide boolean cukup ambigu. Pertimbangkan ini:
Jadi ketika Anda menggunakan pernyataan if, (atau pernyataan kontrol lainnya), seseorang tidak harus menggunakan var tipe "boolean". Oleh karena itu, menurut pendapat saya, bagian "=== true" dari pernyataan Anda tidak perlu jika Anda tahu itu boolean, tetapi benar-benar diperlukan jika nilai Anda adalah var "kebenaran" yang ambigu. Lebih lanjut tentang boolean di javascript dapat ditemukan di sini .
sumber
Revisa https://www.w3schools.com/js/js_comparisons.asp
contoh:
=== Berarti jenis yang sama juga nilai yang sama == hanya nilai yang sama
sumber
Juga dapat diuji dengan objek Boolean, jika Anda perlu menguji suatu objek
error={Boolean(errors.email)}
sumber