null या फ़ील्ड छोड़ें
मुख्य बात: `null` कहता है कि फ़ील्ड मौजूद है पर उसका कोई मान नहीं; छोड़ने का मतलब है फ़ील्ड मौजूद ही नहीं। PATCH bodies, config merging और form prefill में यही अंतर काटता है।

मुख्य बात: null तब भेजें जब उपभोक्ता को "साफ़ किया गया" और "अछूता" में अंतर करना हो — PATCH body में अनुपस्थिति फ़ील्ड को अछूता छोड़ती है और स्पष्ट null उसे साफ़ करता है — और प्रति फ़ील्ड एक परंपरा रखें ताकि responses और config merges स्थिर रहें।
अंतर
{ "nickname": null }
मौजूद, खाली। उपभोक्ता जानता है कि फ़ील्ड स्पष्ट रूप से साफ़ किया गया था।
{ }
अनुपस्थित। उपभोक्ता "कभी सेट नहीं हुआ" और "समर्थित नहीं" में अंतर नहीं कर सकता।
JavaScript में अंतर ठोस है:
'nickname' in obj // false — अनुपस्थित
obj.nickname === null // true — मौजूद और null
obj.nickname === undefined // true — दोनों स्थितियाँ
यह कहाँ मायने रखता है
PATCH bodies। {"nickname": null} nickname साफ़ करता है। {} कुछ नहीं बदलता। अगर handler "null" और "missing" को एक माने, तो उपयोगकर्ता फ़ील्ड कभी साफ़ नहीं कर सकते — वे केवल खाली string सेट कर सकते हैं, जो अलग चीज़ है।
मान से नहीं, key की मौजूदगी से लागू करें:
if (Object.hasOwn(patch, 'nickname')) {
target.nickname = patch.nickname; // null की अनुमति
}
Config merging। अनुपस्थिति डिफ़ॉल्ट विरासत में पाती है; null उसे स्पष्ट रूप से बंद करता है। Helm और Kubernetes values ठीक ऐसे ही व्यवहार करते हैं।
Form prefill। null खाली दिखता है और गायब फ़ील्ड भी, पर submission अलग है: पहले मान था, अब साफ़ किया → null भेजें; कभी भरा नहीं गया → छोड़ें। इस अंतर के बिना, साफ़ करना अछूता छोड़ने जैसा दिखता है।
परंपराएँ
| स्थिति | परंपरा |
|---|---|
| Response bodies | null रखें; स्थिर आकार, सरल टाइप |
| PATCH requests | null साफ़ करता है, अनुपस्थिति बनाए रखती है |
| PUT (पूर्ण प्रतिस्थापन) | अनुपस्थिति का मतलब delete — पूरा document बदल दिया जाता है |
| Config merge | अनुपस्थिति = डिफ़ॉल्ट, null = बंद |
| डेटाबेस | अज्ञात या लागू न होने पर null; ज्ञात-खाली के लिए '' |
Response के आकार स्थिर रखें। ऐसी list जिसमें कुछ items avatar रखते हैं और बाकी नहीं, हर call site पर 'avatar' in item जाँच थोप देती है। avatar: null उपभोग करना आसान है।
तीन चीज़ें जो नहीं करनी
null के लिए "" उपयोग न करें। अधिकतर क्षेत्रों में खाली nickname और अनसेट nickname अलग स्थितियाँ हैं।
Sentinel के रूप में 0 या -1 उपयोग न करें। शून्य एक वैध संख्या है, और sentinel आपकी हर computed average को बिगाड़ देता है।
प्रति endpoint परंपराएँ न मिलाएँ। दो परंपराओं का मतलब है हर client में दो code paths।
FAQ
null और छोड़े गए फ़ील्ड के बीच क्या तय करता है?
पूछें कि उपभोक्ता को "स्पष्ट रूप से साफ़ किया गया" और "कभी सेट नहीं हुआ" में अंतर करना है या नहीं। PATCH body में करना पड़ता है, इसलिए null साफ़ करता है और अनुपस्थिति बनाए रखती है; responses में null रखने से आकार स्थिर और client टाइप सरल रहते हैं।
PATCH endpoint साफ़ करना और अछूता छोड़ना कैसे पहचानता है?
मान नहीं, key की मौजूदगी जाँचें: Object.hasOwn(patch, 'nickname') बताता है कि फ़ील्ड भेजा गया था, और केवल तब असाइन करें, null सहित। अगर handler null और missing को एक माने, तो उपयोगकर्ता फ़ील्ड कभी साफ़ नहीं कर सकते और केवल खाली string पर लौट सकते हैं।
Response bodies में null क्यों रखना चाहिए?
स्थिर आकार का मतलब है client को हर optional key के लिए 'avatar' in item जाँच की ज़रूरत नहीं। जब कुछ list items avatar रखते हैं और बाकी छोड़ देते हैं, तो वह जाँच हर call site पर दोहराई जाती है और गलत होना आसान है।