पार्टी में देर से लेकिन, टीबीएच, कोई भी उत्तर मूल प्रश्न के 50% ("क्यों raw: Array[1]
") का स्पष्टीकरण देता है
1. बैकस्टिक्स के उपयोग के बिना कोष्ठक के बिना फ़ंक्शन को कॉल करना क्यों संभव है?
console.log`1`
जैसा कि अन्य लोगों ने बताया है, इसे टैग्ड टेम्प्लेट कहा जाता है (अधिक विवरण भी यहां )।
इस सिंटैक्स का उपयोग करते हुए, फ़ंक्शन को निम्न तर्क प्राप्त होंगे:
- पहला तर्क: एक सरणी जिसमें स्ट्रिंग के विभिन्न भागों होते हैं जो अभिव्यक्ति नहीं होते हैं।
- बाकी तर्क: प्रत्येक मूल्य जो प्रक्षेपित किए जा रहे हैं (यानी वे जो भाव हैं)।
मूल रूप से, निम्नलिखित 'लगभग' समकक्ष हैं :
fn`My uncle ${uncleName} is ${uncleAge} years old!`
fn(["My uncle ", " is ", " years old!"], uncleName, uncleAge);
(बिंदु 2 देखें। यह समझने के लिए कि वे समान क्यों नहीं हैं)
2. क्यों ["1", raw: Array[1]]
???
सरणी को पहले तर्क के रूप में पारित किया जा रहा है raw
, जिसमें एक संपत्ति है , जो कच्चे तार को एक्सेस करने की अनुमति देता है क्योंकि वे दर्ज किए गए थे (प्रसंस्करण से बचने के अनुक्रम के बिना)।
उदाहरण उपयोग मामला:
let fileName = "asdf";
fn`In the folder C:\Documents\Foo, create a new file ${fileName}`
function fn(a, ...rest) {
console.log(a);
console.log(a.raw);
}
क्या, एक संपत्ति के साथ एक सरणी ??? ???
हां, चूंकि जावास्क्रिप्ट सरणियां वास्तव में ऑब्जेक्ट हैं, इसलिए वे गुणों को संग्रहीत कर सकते हैं ।
उदाहरण:
const arr = [1, 2, 3];
arr.property = "value";
console.log(arr);