मुझे बस {....0}मित्र का कोड मिला । कंसोल रिटर्न {}(खाली वस्तु) में इसका मूल्यांकन करना ।
ऐसा क्यों है? जावास्क्रिप्ट में 4 डॉट्स का क्या अर्थ है?
मुझे बस {....0}मित्र का कोड मिला । कंसोल रिटर्न {}(खाली वस्तु) में इसका मूल्यांकन करना ।
ऐसा क्यों है? जावास्क्रिप्ट में 4 डॉट्स का क्या अर्थ है?
जवाबों:
चार बिंदुओं का वास्तव में कोई अर्थ नहीं है। ...है प्रसार ऑपरेटर , और .0के लिए कम है 0.0।
किसी वस्तु में 0 (या किसी संख्या) को फैलाने से एक खाली वस्तु प्राप्त होती है, इसलिए {}।
Spreading 0 (or any number) yields an empty objectजरूरी नहीं कि यदि आप किसी वस्तु के अलावा किसी अन्य स्थान पर कोई संख्या फैलाते हैं, तो वह एक त्रुटि फेंक देगा जैसे [… 0] एक त्रुटि फेंकता है।
Spreading 0 (or any number) in object literal yields an empty objectअधिक उपयोगी जानकारी
एक वस्तु शाब्दिक में तीन बिंदु एक फैली हुई संपत्ति हैं , जैसे:
const a = { b: 1, c: 1 };
const d = { ...a, e: 1 }; // { b: 1, c: 1, e: 1 }
एक 0 के साथ अंतिम बिंदु एक संख्या शाब्दिक .0है जैसा कि है 0.0। इसलिए यह:
{ ...(0.0) }
संख्या ऑब्जेक्ट के सभी गुणों को ऑब्जेक्ट में फैलता है, हालांकि संख्याओं के पास कोई (स्वयं) गुण नहीं हैं जो आपको एक खाली ऑब्जेक्ट वापस मिलता है।
Function (function x() {}), (x.k = 'v'), ({...x})// {k: 'v'}है, लेकिन के लिए काम नहीं करता हैNumber (x = 10), (x.k = 'v'), ({...x}) // {}
x.kखो जाएगा।
एक साधारण शब्दों {...}में जावास्क्रिप्ट में प्रसार ऑपरेटर एक वस्तु / सरणी को दूसरे के साथ बढ़ाता है।
इसलिए, जब babelifier एक दूसरे के साथ विस्तार करने की कोशिश करता है, तो उसे यह पहचानना होगा कि वह किसी सरणी या ऑब्जेक्ट को विस्तारित करने का प्रयास कर रहा है या नहीं।
के मामले में array, यह तत्वों पर निर्भर करता है।
के मामले में object, यह कुंजियों पर निर्भर करता है।
इस परिदृश्य में, Babelyfier numberऑब्जेक्ट की जाँच करके कुंजियों को निकालने का प्रयास कर रहा है own property callजो कि गायब है 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"}
सरणी के संदर्भ में, चूंकि यह सूचकांक को कुंजी के रूप में लेता है, इसलिए यहां तत्व '1' को arr1'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} // {}
निष्कर्ष में उन डेटा प्रकारों को जो कुंजी-संचालक जोड़े के रूप में व्यवहार किया जा सकता है जब प्रसार ऑपरेटर के साथ उपयोग किया जाता {...}है गैर-खाली ऑब्जेक्ट वापस आता है अन्यथा यह खाली वस्तु देता है{}