Saya bermain-main di jsfiddle.net dan saya ingin tahu mengapa ini kembali benar?
if(0 < 5 < 3) {
alert("True");
}
Begitu juga ini:
if(0 < 5 < 2) {
alert("True");
}
Tetapi ini tidak:
if(0 < 5 < 1) {
alert("True");
}
Apakah kekhasan ini berguna?
javascript
compare
operators
boolean-logic
punkrockbuddyholly
sumber
sumber
Jawaban:
Urutan operasi menyebabkan
(0 < 5 < 3)
ditafsirkan dalam javascript sebagai((0 < 5) < 3)
yang menghasilkan(true < 3)
dan true dihitung sebagai 1, menyebabkannya kembali benar.Ini juga mengapa
(0 < 5 < 1)
mengembalikan false,(0 < 5)
mengembalikan true, yang ditafsirkan sebagai1
, menghasilkan(1 < 1)
.sumber
if(0 < 5 < 1) == false
. Semua sudah jelas sekarang, terima kasih :)((0 < 5) && (5 < 3))
, mungkin ada yang lain tapi saya tidak tahu mereka.Dugaan saya adalah karena
0 < 5
itu benar, dantrue < 3
mendapatkan1 < 3
yang benar.sumber
mungkin karena
true
dianggap1
demikiansumber
Karena
true < 3
, karenatrue == 1
sumber
Adapun pertanyaan Anda apakah kekhasan ini pernah berguna: Saya kira mungkin ada beberapa kasus di mana itu akan berguna (jika kode kental adalah apa yang Anda cari), tetapi dengan mengandalkan itu akan (kemungkinan besar) sangat mengurangi pemahaman kode Anda.
Ini seperti menggunakan post / pre increment / decrement sebagai bagian dari ekspresi yang lebih besar. Bisakah Anda menentukan apa hasil kode ini sekilas?
Catatan: dengan kode ini, Anda kadang-kadang bahkan bisa mendapatkan hasil berbeda tergantung pada bahasa dan kompiler
Merupakan ide bagus untuk membuat hidup Anda mudah bagi diri Anda sendiri dan orang berikutnya yang akan membaca kode Anda. Tuliskan dengan jelas apa yang sebenarnya Anda inginkan terjadi daripada mengandalkan efek samping seperti konversi boolean secara implisit.
sumber
result
18?Jawaban untuk bagian kedua dari pertanyaan, "apakah kekhasan ini pernah berguna?" mungkin tidak, seperti dicatat oleh jawaban sebelumnya, jika itu memang kekhasan bahasa (Javascript) yang benar dilemparkan ke 1, tetapi bahwa programmer tidak dalam tampilan umum 1 dan benar (dan 0 dan salah) sebagai hal yang sama.
Namun jika Anda memiliki model mental 1 menjadi benar dan 0 menjadi salah, maka itu mengarah ke semua jenis teknik boolean bagus yang sangat berguna, kuat, dan langsung. Misalnya, Anda bisa menambah penghitung secara langsung dengan hasil A> 100, yang akan menambah penghitung jika A lebih besar dari 100. Teknik ini mungkin dipandang sebagai kekhasan atau tipuan di Jawa, tetapi dalam array atau bahasa fungsional mungkin idiom.
Contoh klasik dalam bahasa array APL adalah menghitung jumlah item dalam array yang (katakanlah) lebih besar dari 100:
Di mana jika A adalah array 5 item 107 22 256 110 3 maka:
menghasilkan 5 item array boolean:
1 0 1 1 0
dan menjumlahkan hasil boolean ini:
menghasilkan jawaban akhir:
3
Pertanyaan ini adalah contoh sempurna di mana teknik ini akan sangat berguna, terutama jika masalahnya digeneralisasi untuk menentukan apakah n dari nilai m boolean benar.
Periksa apakah setidaknya dua dari tiga boolean benar
sumber
Itu mudah.
Mulai dengan kiri ke kanan sehingga mengevaluasi 0 pertama <5. Apakah itu benar? Iya. Karena TRUE = 1, itu mengevaluasi 1 <3. Karena 1 kurang dari 3 jadi itu benar.
Sekarang dengan ini
Apakah 0 kurang dari 5? Iya. Jadi buat itu BENAR yang juga berarti 1. Sekarang dengan fakta itu dalam pikiran, ia mengevaluasi ke (1 <1). Apakah 1 kurang dari 1? Tidak, karena itu salah. Itu harus sama.
sumber
apakah itu mengevaluasi 0 <5 yang akan mengembalikan 1 untuk true ketika 1 <3 yang benar?
C # ingin Anda melakukan ini "Operator '<' tidak dapat diterapkan ke operan tipe 'bool' dan 'int'"
sumber
Saya mengalami ini beberapa saat yang lalu di Obj-C dan sangat bingung karenanya. Saya mendapatkan hasil yang saya inginkan dengan melakukan sesuatu seperti ini:
Tentu saja itu salah sehingga Anda tidak akan mendapatkan peringatan "benar" itu. Senang saya membaca ini, saya sekarang tahu mengapa.
sumber
Selain python, CoffeeScript adalah bahasa lain yang mendukung perbandingan berantai, sehingga
3 < x < 10
akan dikonversi ke(3 < x && x < 10)
dalam vanilla JSsumber
sumber
Operan boolean ketika dioperasikan melalui operator matematika mengembalikan nomor. untuk memeriksa ini kita lakukan
Jadi
0 < 5
, boolean yang dikembalikan (benar) dioperasikan dengan operator matematika (<) akan mengembalikan angka. Jadi itu mendidih ke 1 <3 yang kembalitrue
sumber
karena 0 kurang dari 5 maka itu mengembalikan true, dan secara default true adalah segala sesuatu termasuk dan dapat dievaluasi ke 1 yang masih kurang dari 3 yang lagi mengembalikan true
sumber
coba frasa hasil Anda sebagai Angka ()
atau coba ini:
Saya googled ini karena saya mendapatkan
(3 >= 20) //returning true
dan saya kira javascript mencoba memeriksa3
sebagai boolean karena saya mendapatkan nilai ini darielm.getAttribute();
fungsi yangconsole.log();
mencetak dalam bentuk String.sumber