javascript क्यों करता है{। । ।.0} का मूल्यांकन{}?




spread-syntax number-literal (3)

एक वस्तु शाब्दिक में तीन बिंदु एक फैली हुई संपत्ति हैं , जैसे:

  const a = { b: 1, c: 1 };
  const d = { ...a, e: 1 }; // { b: 1, c: 1, e: 1 }

0 के साथ अंतिम बिंदु संख्या शाब्दिक है। 0.0 समान है। इसलिए यह:

 { ...(0.0) }

संख्या ऑब्जेक्ट के सभी गुणों को ऑब्जेक्ट में फैलता है, हालांकि संख्याओं के पास कोई (स्वयं) गुण नहीं हैं जो आपको एक खाली ऑब्जेक्ट वापस मिलता है।

https://code.i-harness.com

मुझे अभी मित्र के कोड में {....0} मिला है। कंसोल में इसका मूल्यांकन {} (खाली वस्तु) करता है।

ऐसा क्यों है? जावास्क्रिप्ट में 4 डॉट्स का क्या अर्थ है?


एक सरल शब्दों में {...} जावास्क्रिप्ट में प्रसार ऑपरेटर एक वस्तु / सरणी को दूसरे के साथ बढ़ाता है।

इसलिए, जब babelifier एक दूसरे के साथ विस्तार करने की कोशिश करता है, तो उसे यह पहचानना होगा कि वह किसी सरणी या ऑब्जेक्ट को विस्तारित करने का प्रयास कर रहा है या नहीं।

array के मामले में, यह तत्वों पर पुनरावृत्ति करता है।

object के मामले में, यह कुंजियों पर निर्भर करता है।

इस परिदृश्य में, Babelyfier ऑब्जेक्ट की own property call की जाँच करके number लिए कुंजियाँ निकालने का प्रयास कर रहा है जो कि number लिए अनुपलब्ध है, इसलिए यह खाली ऑब्जेक्ट देता है।


स्प्रेड ऑपरेटर {...} पुनरावृत्तियों को विस्तारित करने की अनुमति देता है। इसका अर्थ है कि उन डेटा प्रकारों को जिन्हें key-value जोड़े के रूप में परिभाषित किया जा सकता है, का विस्तार किया जा सकता है। Object संदर्भ में हम कुंजी-मूल्य जोड़ी को ऑब्जेक्ट प्रॉपर्टी कहते हैं और यह मूल्य है जबकि arrays संदर्भ में हम इंडेक्स को कुंजी और तत्व के रूप में सोच सकते हैं क्योंकि यह मूल्य है।

let obj = { a: 4, b: 1};
let obj2 = { ...obj, c: 2, d: 4}; // {a: 4, b: 1, c: 2, d: 4}

let arr1 = ['1', '2'];
let obj3 = { ...arr1, ...['3']}; // {0: "3", 1: "2"}

सरणी के संदर्भ में, क्योंकि यह इंडेक्स को कुंजी के रूप में लेता है, इसलिए यहां arr1 1 के तत्व '1' को '3' के साथ बदल दिया जाता है क्योंकि दोनों का अलग-अलग सरणी में एक ही सूचकांक होता है।

स्ट्रिंग्स के साथ भी प्रसार ऑपरेटर गैर-रिक्त ऑब्जेक्ट लौटाता है। चूंकि स्ट्रिंग चरित्र की एक सरणी है, इसलिए यह स्ट्रिंग को एक सरणी के रूप में मानता है।

let obj4 = {...'hi',...'hello'}   // {0: "h", 1: "e", 2: "l", 3: "l", 4: "o"}
let obj5 = {...'y',...'x'}   // {0: "x" }

लेकिन अन्य आदिम डेटा प्रकारों के साथ यह खाली वस्तु लौटाता है

नंबरों के साथ

let obj6 = { ...0.0, ...55} // {}

बूलियन के साथ

let obj7 = { ...true, ...false} // {}

निष्कर्ष में उन डेटा प्रकारों को, जो प्रसार ऑपरेटर के साथ उपयोग किए जाने पर कुंजी-मूल्य जोड़े के रूप में व्यवहार किया जा सकता है {...} गैर-रिक्त ऑब्जेक्ट देता है अन्यथा यह खाली वस्तु देता है {}






number-literal