2011-12-20 14 views
6

मैं किसी तृतीय पक्ष JavaScript लाइब्रेरी गूगल बंद संकलक का उपयोग कर कम करें कोशिश कर रहा हूँ, लेकिन यह रेखा से नीचे पर बाहर त्रुटियों:जावास्क्रिप्ट पैकेज, एक आरक्षित कीवर्ड

inBlock.package = package = name 

त्रुटि

त्रुटि है - पार्स त्रुटि। बाद में नाम गायब ऑपरेटर **

name ऊपर एक समारोह के अंदर एक स्थानीय चर है और inBlock एक इनपुट तर्क है। फ़ंक्शन में कहीं भी package उस त्रुटि रेखा के अलावा घोषित नहीं किया गया है।

मैं इसे package के कारण हो सकता है लगता है जावास्क्रिप्ट में एक आरक्षित कीवर्ड है? कोई भी विचार जावास्क्रिप्ट में कौन सा पैकेज है और इसे कैसे ठीक किया जाए?

उत्तर

7

आप सही कर रहे हैं, package जावास्क्रिप्ट में एक आरक्षित शब्द है (लेकिन केवल सख्त मोड में, यही कारण है कि कोड कुछ स्थानों पर काम करता है)।

package भविष्य सुरक्षित है, जो यह कुछ भी के लिए इस्तेमाल नहीं कर रहा है इसका मतलब है, लेकिन आप इसे इस्तेमाल नहीं कर सकते चर नाम है। जब तक आप एक स्ट्रिंग का उपयोग

inBlock['package'] = name; // this is ok 

: हालांकि (आप वास्तव में होगा), आप इसे नाम चाबियाँ करने के लिए वस्तुओं में इस तरह उपयोग कर सकते हैं। आप यह नहीं कर सकते:

inBlock.package = name; // this is not ok 

मैं कहूंगा कि आप इसे कुछ और नाम देने से बेहतर हैं।

+0

हालांकि, आपको वास्तव में ब्रैकेट वाक्यविन्यास का उपयोग करने की आवश्यकता नहीं है। [jsFiddle] (http://jsfiddle.net/4Lpyw/) @nnnnnn – Ryan

+0

यह कुछ दुभाषियों में काम कर सकता है, लेकिन यह अवैध है (जावास्क्रिप्ट: गुड पार्ट्स, पृष्ठ 103 - यदि आप चाहें तो मानक को देख सकते हैं)। –

+0

ओह, उसे नहीं पता था। खैर, यह हर ब्राउज़र में काम करता है जो मैं कम से कम परीक्षण करने में सक्षम हूं :) – Ryan

1

package (जावा से) एक कीवर्ड जावास्क्रिप्ट में संभव बाद में उपयोग के लिए आरक्षित है। समाधान? नाम किसी और अपने चर कुछ :)

आप inBlock.package का नाम नहीं बदल सकते हैं, यह बजाय ब्रैकेट अंकन का उपयोग का उपयोग:

inBlock['package'] 
1

MDN के अनुसार, package "भविष्य के लिए आरक्षित" श्रेणी में है। आप किस ब्राउज़र का उपयोग कर रहे हैं और क्या आपका कोड सख्त मोड में है, इस पर निर्भर करता है कि आप उन शब्दों को पहचानकर्ता के रूप में उपयोग करने में सक्षम नहीं हो सकते हैं या नहीं। दूसरे शब्दों में, आपको उन्हें सुरक्षित होने से बचना चाहिए।

आप सुरक्षित रूप से संपत्ति के नाम के रूप में आरक्षित शब्द का उपयोग कर सकते है अगर आप इस वाक्य रचना का उपयोग करें:

inBlock["package"] = something; 

लेकिन वह अपने package चर के साथ आप मदद नहीं करता है। क्या आप इसका नाम बदल सकते हैं?

2

"पैकेज" ecmascript 3 में एक आरक्षित शब्द है। Ecmascript 5 ने आरक्षित शब्द सेट को कम कर दिया है जो इस उपलब्धियों को ब्राउजर पर बना रहा है, जिसने इसे कार्यान्वित किया है, और इसे फिर से पारिस्थितिकी 5 "सख्त" मोड में पेश किया है (जो कि इसका आधार है भावी emcascript संशोधन)।

ECMAScript 5 भी आरक्षित शब्द पर लगाए गए प्रतिबंधों बदल गया है, विशेष रूप से, आप (मोड की परवाह किए बिना), लेकिन नहीं चर नाम संपत्ति के नाम के रूप में आरक्षित शब्दों का प्रयोग कर सकते हैं।

परिणामस्वरूप, यदि आप एक्स्स्क्रिप्ट 5 मोड में क्लोजर कंपाइलर डालते हैं तो आप "inBlock.package" का उपयोग कर सकते हैं और यह शिकायत नहीं करेगा, लेकिन यदि आप इसे पुराने आईई संस्करणों में उपयोग करने का प्रयास करते हैं (8,7,6 मुझे विश्वास है) यह पार्स करने में असफल हो जाएगा। अधिकांश अन्य ब्राउज़रों ने spec के उस हिस्से का पालन नहीं किया और प्रभावित नहीं हैं।

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