29

मुझे यकीन है कि यह कैसे व्याख्या करने के लिए नहीं कर रहा हूँ, लेकिन जब मैंबैकटिक एक समारोह बुला

console.log`1` 

चलाने गूगल क्रोम में, मैं उत्पादन की तरह

console.log`1` 
VM12380:2 ["1", raw: Array[1]] 

क्यों बैकटिक लॉग बुला रहा है मिल कार्य, और यह raw: Array[1] का सूचकांक क्यों बना रहा है?

प्रश्न कैटगोकाट द्वारा जेएस कमरे में लाया गया प्रश्न, लेकिन templating strings के बारे में कुछ भी समझ में नहीं आया जो वास्तव में यह क्यों नहीं हो रहा है।

+2

संबंधित: [जावास्क्रिप्ट Es6 टैग किए गए टेम्पलेट्स - कच्चे कब उपयोग किया जाता है? जब पकाया जाता है?] (Http://stackoverflow.com/q/27782577/218196), [ES6 टैग किए गए टेम्पलेट फ़ंक्शंस उनके तर्क आदेश की व्याख्या कैसे करते हैं?] (Http://stackoverflow.com/q/24816777/218196) –

उत्तर

24

इसे ईएस -6 में टैग की गई टेम्पलेट स्ट्रिंग कहा जाता है और उन्हें Here, मजाकिया के बारे में पढ़ा जा सकता है, मुझे बहुत चैट के तारांकित अनुभाग में लिंक मिला।

लेकिन कोड का रिलीज हिस्सा नीचे है (आप मूल रूप से फ़िल्टर प्रकार बना सकते हैं)।

function tag(strings, ...values) { 
    assert(strings[0] === 'a'); 
    assert(strings[1] === 'b'); 
    assert(values[0] === 42); 
    return 'whatever'; 
} 
tag `a${ 42 }b` // "whatever" 

असल में यह केवल "1" को console.log फ़ंक्शन के साथ टैग कर रहा है, क्योंकि यह किसी अन्य फ़ंक्शन के साथ करेगा। टैगिंग फ़ंक्शंस टेम्पलेट स्ट्रिंग्स के पार्स किए गए मानों को स्वीकार करते हैं और मूल्यों को अलग-अलग करते हैं जिन पर आगे के कार्यों को किया जा सकता है।

कोलाहल

var _taggedTemplateLiteralLoose = function (strings, raw) { strings.raw = raw; return strings; }; 

console.log(_taggedTemplateLiteralLoose(["1"], ["1"])); 

करने के लिए उपरोक्त कोड transpiles आप ऊपर के उदाहरण में यह देख सकते हैं, कोलाहल से transpiled किए जाने के बाद, टैगिंग समारोह (console.log) निम्न में से वापसी मान भेजी जा रही है es6-> 5 पारदर्शी कोड।

_taggedTemplateLiteralLoose (["1"], ["1"]);

इस फ़ंक्शन का वापसी मूल्य console.log पर भेज दिया गया है जो तब सरणी मुद्रित करेगा।

संबंधित मुद्दे