3
Ia sangat biasa dalam php
Untuk melihat kod yang ditulis seperti ini:
Apa yang saya maksudkan ialah tugasan dalam keadaan. Cukup dengan cunning, ia boleh dilakukan di JavaScript juga, walaupun ia jauh kurang biasa:
Pada pandangan pertama, anda akan diampuni kerana berfikir bahawa itu adalah kesilapan kesilapan! Sesungguhnya, sesetengah debuggers akan membenderakannya dengan amaran, bertanya sama ada anda bermaksud ujian untuk kesamaan (==) dan salah tamat sebagai tugasan (=).
Tetapi ia bukan satu kesilapan -kunci untuk memahaminya adalah untuk memahami
dua perkara
:
Pertama, tugasan mengembalikan nilai (nilai yang anda berikan). Kedua dan yang paling penting, nilai yang dikembalikannya menilai kepada benar atau palsu, dan akhirnya menentukan sama ada keadaan itu berlalu.
Sekarang, di dunia penilaian dan traversal, teknik ini adalah selamat dan boleh diramal kerana nod Dom
sama ada wujud atau mereka batal dan null diperlukan untuk menilai palsu
. Oleh itu, dalam contoh kod di atas, syarat akan dinilai untuk benar jika elemen "#post-summary" wujud, atau palsu jika tidak.
Begitu juga, anda boleh menggunakan helah yang sama untuk melancarkan hierarki yang tidak diketahui, melintasi ibu bapa berturut -turut menggunakan sementara (). Contoh ini membina pelbagai nama nod antara sasaran acara dan #document:
Tetapi di tempat lain di JavaScript, anda dapat mendapati diri anda berada di wilayah yang kurang dipercayai, kerana betapa benar atau bagaimana banyak nilai palsu yang berubah menjadi
if($summary = get_post_summary())
{
return $summary;
}
Salin selepas log masuk
tidak sama sekali
if(summary = document.getElementById("post-summary"))
{
return summary.innerHTML;
}
Salin selepas log masuk
intuitif.
Kedua -dua nombor positif dan negatif, sebagai contoh, menilai benar kecuali sifar dan nan
. Dan aneh, objek
Dicipta dengan pembina Boolean selalu menilai benar, walaupun ia dicipta sebagai boolean baru (palsu)!
Oleh itu, peringatkan! Sintaks seperti ini bukan untuk yang lemah hati; Juga tidak boleh digunakan dengan cara yang cavalier, dengan terlalu banyak penukaran jenis dan pemutus nilai sewenang -wenangnya. Tetapi digunakan dengan baik dalam keadaan yang sesuai, ia dapat memudahkan banyak syarat untuk menghasilkan kod yang lebih cepat dan lebih leaner.
var names = [], node = e ? e.target : event.srcElement;
do
{
names.push(node.nodeName);
}
while(node = node.parentNode)
Salin selepas log masuk
Kredit Thumbnail: Sbwoodside
Soalan Lazim (Soalan Lazim) Mengenai Tugasan Dalam Keadaan
Apakah tugasan di dalam keadaan dalam pengaturcaraan? Ini adalah amalan biasa dalam banyak bahasa pengaturcaraan termasuk JavaScript, C, dan Python. Ia membolehkan lebih banyak kod ringkas sebagai tugasan dan pemeriksaan keadaan boleh dilakukan dalam satu baris. Walau bagaimanapun, ia juga boleh menyebabkan kekeliruan dan pepijat yang berpotensi jika tidak digunakan dengan teliti, kerana operasi tugasan mungkin disalah anggap operasi perbandingan.
Kenapa ia dianggap amalan buruk untuk melaksanakan tugasan dalam ekspresi bersyarat? Ini kerana pengendali tugasan (=) dengan mudah boleh disalah anggap sebagai pengendali kesamaan (==). Akibatnya, syarat yang dimaksudkan untuk menjadi perbandingan secara tidak sengaja boleh menjadi tugasan, yang membawa kepada tingkah laku yang tidak dijangka dalam kod. Di samping itu, tugasan dalam keadaan boleh membuat kod lebih sukar untuk dibaca dan difahami, terutamanya untuk pengaturcara yang kurang berpengalaman. Sebagai contoh, bukannya menulis jika (x = getValue ()), anda boleh menulis x = getValue (); jika (x). Ini menjadikan kod lebih jelas dan mengurangkan risiko kekeliruan atau pepijat. Sebagai contoh, dalam gelung di mana nilai perlu dikemas kini dan diperiksa dalam setiap lelaran, tugasan dalam keadaan boleh membuat kod lebih ringkas. Walau bagaimanapun, ini perlu dilakukan dengan berhati -hati dan kod harus dikomentari dengan jelas untuk mengelakkan kekeliruan.
Apakah perbezaan antara pengendali tugasan dan pengendali kesamaan? Sebagai contoh, x = 5 memberikan nilai 5 kepada pembolehubah x. Sebaliknya, pengendali kesamaan (==) digunakan untuk membandingkan dua nilai. Sebagai contoh, jika (x == 5) memeriksa sama ada nilai x adalah sama dengan 5.
Bagaimana TypeScript mengendalikan tugasan dalam keadaan? Walau bagaimanapun, TypeScript mempunyai pemeriksaan jenis ketat yang boleh membantu menangkap kesilapan yang berpotensi yang disebabkan oleh tugasan dalam keadaan. Sebagai contoh, jika anda cuba menetapkan rentetan kepada pemboleh ubah yang sepatutnya menjadi nombor di dalam keadaan, TypeScript akan memberikan kesilapan masa kompilasi. Sebagai contoh, jika (x = 5) akan sentiasa benar kerana ia memberikan 5 hingga x, dan bukannya memeriksa jika x adalah sama dengan 5. Ini boleh membawa kepada tingkah laku yang tidak dijangka dalam kod. Satu pendekatan adalah dengan teliti memeriksa semua kenyataan bersyarat untuk memastikan bahawa mereka menggunakan pengendali yang betul. Menggunakan Linter atau alat analisis kod statik juga boleh membantu menangkap isu -isu ini.
Bolehkah tugasan dalam keadaan digunakan dalam semua bahasa pengaturcaraan?
Tidak semua bahasa pengaturcaraan membenarkan tugasan dalam keadaan. Sebagai contoh, Python tidak membenarkan tugasan dalam keadaan dan akan memberikan ralat sintaks jika anda cuba melakukannya. Sentiasa periksa peraturan sintaks bahasa pengaturcaraan yang anda gunakan.
Adakah terdapat sebarang alternatif untuk tugasan dalam keadaan? Satu alternatif yang biasa adalah menggunakan pemboleh ubah sementara untuk memegang nilai yang perlu diberikan dan diperiksa. Ini boleh menjadikan kod lebih jelas dan lebih mudah difahami. Alternatif lain ialah menggunakan fungsi yang mengembalikan nilai dan kemudian periksa nilai itu dalam keadaan.
Atas ialah kandungan terperinci Tugasan dalam keadaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!