2012-10-27 9 views
12

HTML पृष्ठों में जावास्क्रिप्ट ब्लॉक की अनदेखी करने के बहुत पुराने ब्राउज़र प्राप्त करने के लिए एक पुरानी मुहावरा एचटीएमएल टिप्पणी में <script> तत्व की सामग्री रैप करने के लिए है:एचटीएमएल ओपनिंग-टिप्पणी वैध जावास्क्रिप्ट है?

<script> 
    <!-- 
     alert("Your browser supports JavaScript"); 
    //--> 
</script> 

कोई औचित्य नहीं है पुराने JavaScriptless ब्राउज़रों पाठ के रूप में प्रस्तुत करना होगा सामग्री <script> तत्व का, इसलिए जावास्क्रिप्ट को एक HTML टिप्पणी में डालने से ब्राउज़र को प्रस्तुत करने के लिए कुछ भी नहीं मिलता है।

एक आधुनिक ब्राउज़र, दूसरे हाथ पर, <script> तत्व देख सकते हैं और जावास्क्रिप्ट के रूप में अपनी सामग्रियों को पार्स होगा। नतीजतन, टिप्पणियों को वैध जावास्क्रिप्ट होने की आवश्यकता है। समापन एचटीएमएल टिप्पणी (-->) को जावास्क्रिप्ट पार्सर द्वारा अनदेखा किया गया है क्योंकि यह पहले जावास्क्रिप्ट लाइन-टिप्पणी (//) से पहले है।

मेरा प्रश्न है, कैसे उद्घाटन एचटीएमएल टिप्पणी (<!--) जावास्क्रिप्ट पार्सर विफल नहीं करता है? मैंने विभिन्न लोगों से सुना है कि शुरुआती एचटीएमएल टिप्पणी वैध जावास्क्रिप्ट है। यदि यह सच है कि उद्घाटन टिप्पणी का मूल्यांकन जावास्क्रिप्ट के रूप में किया जाता है, तो यह निष्पादित होने पर क्या करता है?

+0

यह मान्य है, बस इसे अपने कंसोल में सम्मिलित करें। मुझे जानना उत्सुक होगा कि क्यों, हालांकि। – kapa

+1

निष्पादित होने पर यह अनिर्धारित लौटाता है, और नियमित '//' टिप्पणी की तरह काम करता है। यह एक हार्डकोडेड जादू स्ट्रिंग की तरह दिखता है? वास्तविक उत्तर जानने के लिए भी उत्सुक है। – c69

+0

अच्छी जगह :) अब व्यक्तियों के दिमाग के साथ खेलने के लिए इस तरह की लाइन टिप्पणियां शुरू कर देगी: डी – clentfort

उत्तर

7

यह कुछ रोमांचक, एक अभिव्यक्ति एक विशेष अर्थ (<, ! और -- जावास्क्रिप्ट में सभी ऑपरेटर हैं) हो सकता है लग रहा था, लेकिन ऑपरेंड के बिना यह मतलब नहीं है।

Turns out कि <!-- जावास्क्रिप्ट में // के बराबर है, इसका उपयोग एक पंक्ति पर टिप्पणी करने के लिए किया जाता है।

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

कहना है कि जब तक यह पता करने के लिए एक अजीब बात है, टिप्पणी के इस प्रकार नहीं वास्तविक कोड में है कि अन्य लोगों को पढ़ने के लिए और साथ काम करने के लिए हो सकता है इस्तेमाल किया जाना चाहिए जरूरत नहीं।

"हैक" भी अप्रचलित है, क्योंकि अब हर ब्राउज़र <script> टैग को समझता है और इसकी सामग्री प्रदर्शित नहीं करता है (भले ही जावास्क्रिप्ट बंद हो)। निजी तौर पर, ज्यादातर मामलों में मैं जावास्क्रिप्ट को सीधे HTML में लिखने से बचने की कोशिश करता हूं और हमेशा HTML और जावास्क्रिप्ट को अलग करने के लिए अपने जावास्क्रिप्ट को बाहरी संसाधन के रूप में लोड करता हूं।

+0

यह अच्छा है, मुझे यह नहीं पता था! – Jim

3

एक और StackOverflow सवाल में, @MathiasBynens दिया कि मैं क्या विश्वास है है जवाब:

Why is the HTML comment open block valid JavaScript?

संक्षेप में, जाहिरा तौर पर, यह ब्राउज़र आधारित जे एस इंजन के लिए एक गैर मानक है कि इन <!-- और --> मानक जे एस में // की तरह एकल लाइन टिप्पणी मार्कर के रूप में अनुमति देता है।

+0

मुझे एहसास नहीं हुआ कि बंद (एचटीएमएल) टिप्पणी को जावास्क्रिप्ट टिप्पणी के रूप में भी पुनः संयोजित किया गया है। यह जांचता है (फ़ायरफ़ॉक्स में जेएस कंसोल का उपयोग करके), लेकिन मुझे आश्चर्य है कि लोग अभी भी '// ->' का उपयोग क्यों करते हैं। शायद '-> 'हाल ही में जेएस टिप्पणी के रूप में व्याख्या की गई है? – Daniel