जावास्क्रिप्ट एक टेम्पलेट स्ट्रिंग को ऑब्जेक्ट प्रॉपर्टी कुंजी के रूप में अनुमति क्यों नहीं देता है? उदाहरण के लिए, जब मैं इनपुट करता हूं:
foo = {`bar`: 'baz'}
NodeJS REPL में, यह SyntaxError
एक लंबे स्टैक ट्रेस के साथ "अनपेक्षित टेम्पलेट स्ट्रिंग" के साथ फेंकता है । संपत्ति मूल्य ठीक हैं, हालांकि, जो अप्रत्याशित नहीं है। ब्राउज़र में इसी तरह की त्रुटियां होती हैं, उदाहरण के लिए, फायरबग SyntaxError
"अमान्य संपत्ति आईडी" के साथ फेंकता है ।
टेम्पलेट स्ट्रिंग्स को "गणना की गई संपत्ति के नाम" में अनुमति दी जाती है। उदाहरण के लिए, यह सिंटैक्स का समर्थन करने वाले सभी ब्राउज़रों में पूरी तरह से ठीक संकलित करता है:
var foo = {
[`bar` + 1]: `baz`
};
और वस्तु बनाता है {"bar1": "baz"}
।
टेम्प्लेट स्ट्रिंग्स को शाब्दिक ऑब्जेक्ट कुंजियों के रूप में अनुमति क्यों नहीं दी जाती है? क्या यह प्रदर्शन कारणों से है? टेम्पलेट स्ट्रिंग्स को संकलित किया जाना चाहिए, संभवतः रनटाइम पर (मुझे गलत होने पर सही करें), जिसका अर्थ है कि हर बार जब यह इस ऑब्जेक्ट का सामना करता है, तो दुभाषिया को ऑब्जेक्ट नाम की गणना करनी होगी। "पका हुआ" टेम्पलेट स्ट्रिंग्स जैसी चीजों में फैक्टरिंग, ऐसा लगता है कि यह धीमा हो सकता है, हालांकि हमारे पास ES5 के बाद से गेटर्स और सेटर हैं। फ़ायरफ़ॉक्स एक त्रुटि के रूप में इसका उल्लेख नहीं करता है, यही वजह है कि मैंने इसे अप्रत्याशित पाया। क्या भविष्य में कुछ समय के लिए वाक्य रचना की अनुमति होगी?