Mengelakkan perangkap penilaian Boolean yang tidak tepat dalam JS/TS

WBOY
Lepaskan: 2024-07-21 12:25:38
asal
701 orang telah melayarinya

Éviter les pièges des évaluations booléennes imprécises en JS/TS

Dalam dunia pembangunan web, kita sering berhadapan dengan cabaran yang pada pandangan pertama nampak mudah, tetapi boleh bertukar menjadi teka-teki yang rumit dengan cepat. Baru-baru ini, saya mempunyai pengalaman menarik semasa projek Angular yang mengingatkan saya tentang kepentingan ketepatan dalam menilai keadaan Boolean dalam TypeScript. Saya ingin berkongsi pelajaran ini dengan anda, berharap ia dapat membantu anda mengelakkan perangkap yang sama.

Konteks masalah

Keadaan awal

Dalam projek Angular saya, saya berhadapan dengan keadaan yang melibatkan empat pembolehubah Boolean. Daripada empat ini, dua bergantung pada data tak segerak yang datang dari bahagian belakang melalui pemerhatian. Matlamatnya adalah mudah: syarat hanya sepatutnya benar jika dua pembolehubah khusus ini adalah palsu.

Pendekatan awal dan hadnya

Pada mulanya, saya memilih pendekatan yang kelihatan logik dan ringkas bagi saya:

if (terrainPret && arbitreArrive && 
    !equipeLocaleAbsente && !equipeVisiteuseAbsente) {
  // Commencer le match
}
Salin selepas log masuk

Pendekatan ini kelihatan elegan: menggunakan tanda seru (!) adalah untuk memastikan pembolehubah tak segerak adalah palsu. Walau bagaimanapun, saya dengan cepat mendapati bahawa kaedah ini menyembunyikan perangkap halus.

Perangkap penilaian boolean

wahyu

Masalah muncul apabila saya menyedari bahawa kod saya tidak berfungsi seperti yang diharapkan. Selepas penyiasatan, saya menyedari bahawa saya telah terlepas pandang aspek penting penilaian Boolean dalam TypeScript.

Penerangan teknikal

Dalam TypeScript, beberapa nilai dianggap "palsu", iaitu, nilai tersebut dinilai sebagai palsu dalam konteks Boolean. Nilai ini termasuk:

  • palsu
  • 0
  • "" (rentetan kosong)
  • null
  • tidak ditentukan
  • NaN

Dalam kes saya, pembolehubah tak segerak boleh tidak ditentukan sebelum menerima nilai dari bahagian belakang. Akibatnya, syarat !equipeLocaleAbsente misalnya adalah benar bukan sahaja apabila pembolehubah itu palsu, tetapi juga apabila ia tidak ditentukan.

Penyelesaiannya: jelas

Pendekatan yang diperbetulkan

Untuk menyelesaikan masalah ini, saya harus lebih jelas dalam keadaan saya:

if (terrainPret && arbitreArrive && 
    equipeLocaleAbsente === false && equipeVisiteuseAbsente === false) {
  // Commencer le match
}
Salin selepas log masuk

Pendekatan ini memastikan pembolehubah tak segerak adalah palsu secara khusus, bukan sekadar nilai "palsu".

Faedah ketepatan

Penyelesaian ini mempunyai beberapa kelebihan:

  1. Ia menghapuskan kekaburan dalam penilaian keadaan.
  2. Ia menjadikan kod lebih mudah dibaca dan lebih jelas dalam niatnya.
  3. Ia menghalang tingkah laku yang tidak dijangka yang dikaitkan dengan penilaian nilai "palsu".

Kesimpulan

Pengalaman ini mengingatkan saya tentang kepentingan ketepatan dan kejelasan dalam kod, terutamanya apabila bekerja dengan operasi tak segerak dan penilaian Boolean. Ia juga menyerlahkan keperluan untuk memahami nuansa bahasa yang kami gunakan.

Atas ialah kandungan terperinci Mengelakkan perangkap penilaian Boolean yang tidak tepat dalam JS/TS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan