null atau tinggalkan medan
Inti pati: `null` bermaksud medan wujud tanpa nilai; meninggalkannya bermaksud medan tidak wujud. Badan PATCH, penggabungan konfigurasi dan praisi borang ialah tempat perbezaan itu benar-benar terasa.

Pokoknya: hantar null apabila pengguna perlu membezakan "dikosongkan" daripada "tidak disentuh" — dalam badan PATCH, peninggalan membiarkan medan itu dan null eksplisit mengosongkannya — dan kekalkan satu konvensyen bagi setiap medan supaya respons dan penggabungan konfigurasi kekal stabil.
Perbezaannya
{ "nickname": null }
Hadir, kosong. Pengguna tahu medan itu telah dikosongkan secara eksplisit.
{ }
Tiada. Pengguna tidak dapat membezakan "tidak pernah ditetapkan" daripada "tidak disokong".
Dalam JavaScript perbezaan itu konkrit:
'nickname' in obj // false — tiada
obj.nickname === null // true — hadir dan null
obj.nickname === undefined // true — kedua-dua kes
Di mana ia penting
Badan PATCH. {"nickname": null} mengosongkan gelaran. {} tidak mengubah apa-apa. Jika pengendali menganggap "null" dan "hilang" sebagai sama, pengguna tidak pernah dapat mengosongkan medan itu — mereka hanya boleh menetapkan rentetan kosong, yang merupakan perkara berbeza.
Laksanakan dengan kehadiran kunci, bukan nilai:
if (Object.hasOwn(patch, 'nickname')) {
target.nickname = patch.nickname; // null dibenarkan
}
Penggabungan konfigurasi. Ketiadaan mewarisi lalai; null menyahdayakannya secara eksplisit. Ini betul-betul cara nilai Helm dan Kubernetes berkelakuan.
Praisi borang. null dipaparkan sebagai kosong dan begitu juga medan yang hilang, tetapi penyerahan berbeza: ada nilai, kini dikosongkan → hantar null; tidak pernah diisi → tinggalkan. Tanpa perbezaan itu, mengosongkan kelihatan sama seperti tidak menyentuh.
Konvensyen
| Situasi | Konvensyen |
|---|---|
| Badan respons | Kekalkan null; bentuk stabil, jenis lebih ringkas |
| Permintaan PATCH | null mengosongkan, ketiadaan mengekalkan |
| PUT (ganti penuh) | Ketiadaan bermaksud padam — keseluruhan dokumen diganti |
| Gabungan konfigurasi | Ketiadaan = lalai, null = dinyahdayakan |
| Pangkalan data | null untuk tidak diketahui atau tidak berkenaan; '' untuk diketahui kosong |
Kekalkan bentuk respons stabil. Senarai di mana sesetengah item membawa avatar dan yang lain tidak memaksa semakan 'avatar' in item pada setiap tapak panggilan. avatar: null lebih mudah digunakan.
Tiga perkara yang tidak boleh dilakukan
Jangan guna "" untuk null. Gelaran kosong dan gelaran yang tidak ditetapkan ialah keadaan berbeza dalam kebanyakan domain.
Jangan guna 0 atau -1 sebagai penanda. Sifar ialah nombor yang sah, dan penanda itu merosakkan setiap purata yang anda kira.
Jangan campurkan konvensyen bagi setiap titik akhir. Dua konvensyen bermaksud dua laluan kod dalam setiap klien.
Soalan Lazim
Apa yang menentukan antara null dan medan yang ditinggalkan?
Tanyakan sama ada pengguna perlu membezakan "dikosongkan secara eksplisit" daripada "tidak pernah ditetapkan". Dalam badan PATCH ia mesti, jadi null mengosongkan dan ketiadaan mengekalkan; dalam respons, mengekalkan null menjadikan bentuk stabil dan jenis klien lebih ringkas.
Bagaimana titik akhir PATCH membezakan pengosongan daripada pembiaran?
Semak kehadiran kunci, bukan nilai: Object.hasOwn(patch, 'nickname') memberitahu anda medan itu dihantar, dan hanya kemudian tetapkan, termasuk null. Jika pengendali menganggap null dan hilang sebagai sama, pengguna tidak pernah dapat mengosongkan medan dan hanya boleh kembali kepada rentetan kosong.
Mengapa badan respons harus mengekalkan null?
Bentuk yang stabil bermaksud klien tidak memerlukan semakan 'avatar' in item untuk setiap kunci pilihan. Apabila sesetengah item senarai membawa avatar dan yang lain meninggalkannya, semakan itu diduplikasi pada setiap tapak panggilan dan mudah salah.