JSON Toolkit

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.

Pertengahan~3 min bacaanDiterbitkan 2026-10-30Dikemas kini 2026-10-30
Perbezaan semantik antara null dan medan yang tiada

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.

Bacaan lanjut