1. || (logis atau),
Secara harfiah, false dikembalikan hanya ketika baik sebelum dan sesudah false, jika tidak benar dikembalikan.
peringatan (true || false); // truealert (false || true); // truealert (true || true); // truealert (false || false); // PALSU
Orang bodoh ini mengetahuinya ~~
Namun, dalam arti yang lebih dalam, ada dunia lain. Coba kode berikut
Peringatan (0 || 1); // 1
Jelas, kita tahu bahwa 0 yang pertama berarti salah, dan yang kedua berarti benar, maka hasil di atas harus benar, dan faktanya mengembalikan hasilnya adalah 1. Lihatlah kode berikut:
Peringatan (2 || 1); // 2
Kita tahu bahwa 2 yang pertama itu benar dan yang terakhir adalah benar. Jadi apa hasil pengembaliannya? Hasil tes adalah 2, lanjutkan membaca:
peringatan ('a' || 1); // 'a'Demikian pula, yang pertama 'A' benar, dan 1 berikutnya adalah benar; Hasil tes adalah 'a', dan berikut ini
Peringatan ('' || 1); // 1Dari yang di atas, kita tahu bahwa bagian depan "salah, 1 belakang itu benar, dan hasil pengembalian adalah 1. Lihatlah yang berikut ini
peringatan ('a' || 0); // 'a'Yang pertama 'A' benar, dan 0 berikutnya adalah salah, hasil pengembalian adalah 'a', lanjutkan ke yang berikut ini
Peringatan ('' || 0); // 0Sebelumnya "salah, dan 0 berikutnya juga salah, dan hasil pengembalian adalah 0
waspada (0 || ''); // ''
0 pertama adalah salah, yang berikutnya "adalah salah, hasil pengembalian adalah"
Ini berarti
1. Selama "||" salah di depan "||", tidak peduli apakah "||" benar atau salah di belakang "||", nilai setelah "||" akan dikembalikan.
2. Selama "||" benar, terlepas dari apakah "||" benar atau salah, nilai sebelum "||" akan dikembalikan.
Saya menyebutnya prinsip sirkuit pendek: Jika Anda tahu hasil dari yang pertama, Anda akan tahu output sesudahnya. Jika yang pertama benar, maka ambil nilai yang pertama, dan jika yang pertama salah, maka ambil nilai yang kedua.
6 bola yang harus diingat JS: Harap diingat: dalam operasi logis JS, 0, "", null, false, tidak terdefinisi, dan Nan akan dinilai salah, dan yang lainnya benar (tampaknya tidak ada kelalaian, harap konfirmasi). Anda harus mengingat ini, jika tidak, akan ada masalah dengan aplikasi || Dan &&.
Ngomong -ngomong: Saya sering bertanya mengapa saya tidak menulis jika (attr) secara langsung jika (attr);
Faktanya, ini adalah cara menulis yang lebih ketat:
Harap uji perbedaan antara Typeof 5 dan TypeOf !! 5. Fungsi !! adalah untuk mengubah variabel jenis lain menjadi jenis bool.
2. && (logistik dan)
Secara harfiah, benar akan dikembalikan hanya ketika baik sebelum dan sesudah itu benar, jika tidak salah akan dikembalikan.
peringatan (true && false); // falsealert (true && true); // truealert (false && false); // falsealert (false && true); // PALSU
Kemudian, berdasarkan pengalaman di atas, mari kita lihat situasi di mana angka "&&" bukan hanya tipe Boolean.
alert ('' && 1); // ''Simpulnya dikembalikan "," && "sebelumnya" adalah salah, dan 1 benar setelahnya.
alert ('' && 0); // ''Simpulnya dikembalikan "," && "sebelumnya" adalah salah, dan 0 juga salah.
alert ('a' && 1); // 1Knot mengembalikan 1, "&&" sebelum "A adalah benar, dan berikut ini adalah 1 juga benar.
alert ('a' && 0); // 0Simpul mengembalikan 0, "&&" sebelum "A adalah benar, dan berikut ini adalah 0 adalah salah.
alert ('a' && ''); // ''Simpulnya kembali "," && "sebelum" A benar, dan "After" adalah salah.
Peringatan (0 && 'A'); // 0
Simpul mengembalikan 0, "&&" sebelum "0 adalah salah, dan 'A' benar.
peringatan (0 && ''); // 0
Simpul mengembalikan 0, "&&" sebelum "0 adalah salah, dan sesudahnya" juga salah.
Prinsip Sirkuit Pendek
1. Selama "&&" adalah salah, tidak peduli apakah "&&" itu benar atau salah, nilai sebelum "&&" akan dikembalikan;
2. Selama "&&" adalah benar, tidak peduli apakah "&&" benar atau salah, hasilnya akan mengembalikan nilai setelah "&&";
3. Aplikasi dalam Pengembangan
Tiga kode berikut setara:
a = a || "DefaultValue"; if (! a) {a = "defaultValue"; } if (a == null || a == "" || a == tidak terdefinisi) {a = "defaultValue"; }Mana yang ingin Anda gunakan?
2. Seperti var yahoo = yahoo || {}; sangat banyak digunakan. Bukankah cara untuk mendapatkan nilai awal yang elegan? dari if. . . . lain ... jauh lebih baik, lebih baik dari? : Jauh lebih baik.
3. Callback && callback ()
Dalam panggilan balik, ini sering ditulis dengan cara ini, dan lebih ketat. Pertama, tentukan apakah ada panggilan balik. Jika ada, jalankan. Tujuan menulis dengan cara ini adalah untuk mencegah kesalahan dilaporkan.
Jika Anda menulis callback () secara langsung; Kode akan melaporkan kesalahan saat panggilan balik tidak ada.
4. Contoh komprehensif
Persyaratan ditunjukkan pada gambar:
Tulis deskripsi gambar di sini
Asumsikan bahwa tingkat pertumbuhan ditentukan sebagai berikut:
1 panah ditampilkan ketika laju pertumbuhan 5;
2 Panah ditampilkan ketika laju pertumbuhan 10;
3 panah ditampilkan ketika laju pertumbuhan 12;
4 Panah ditampilkan ketika laju pertumbuhan 15;
Semua yang lain menampilkan 0 panah.
Bagaimana cara mengimplementasikannya dengan kode?
Sedikit jika, kalau tidak:
var add_level = 0; if (add_step == 5) {add_level = 1; } lain jika (add_step == 10) {add_level = 2; } lain jika (add_step == 12) {add_level = 3; } lain jika (add_step == 15) {add_level = 4; } else {add_level = 0; }Sakelar yang sedikit lebih baik:
var add_level = 0; switch (add_step) {case 5: add_level = 1; merusak; Kasus 10: add_level = 2; merusak; Kasus 12: add_level = 3; merusak; Kasus 15: add_level = 4; merusak; Default: add_level = 0; merusak;}Jika persyaratan diubah menjadi:
Tingkat pertumbuhan adalah> 12 dan 4 panah ditampilkan;
3 panah ditampilkan ketika laju pertumbuhan> 10;
Kecepatan pertumbuhan adalah> 5 dan 2 panah ditampilkan;
Kecepatan pertumbuhan> 0 menunjukkan 1 panah;
Kecepatan pertumbuhan adalah <= 0 dan 0 panah ditampilkan.
Maka akan sangat merepotkan untuk diimplementasikan dengan Switch.
Jadi, pernahkah Anda berpikir untuk mengimplementasikannya dalam satu baris?
Oke, mari kita lihat ekspresi yang kuat dari JS:
var add_level = (add_step == 5 && 1) || (add_step == 10 && 2) || (add_step == 12 && 3) || (add_step == 15 && 4) || 0;
Lebih kuat dan lebih baik:
var add_level = {'5': 1, '10 ': 2, '12': 3, '15 ': 4} [add_step] || 0;Persyaratan kedua:
var add_level = (add_step> 12 && 4) || (add_step> 10 && 3) || (add_step> 5 && 2) || (add_step> 0 && 1) || 0;
Di atas adalah analisis komprehensif dari "&&" dan "||" Operator di JavaScript diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!