2013-02-24 35 views
6

का एक रूप हो सकता है, मैं एक पुस्तक पढ़ने के दौरान मिले एक कोड का परीक्षण कर रहा हूं। जेएस फिडल में इसका परीक्षण करते समय मुझे यह त्रुटि मिलती है, document.write eval का एक रूप हो सकता है।मुझे यह jsfiddle त्रुटि क्यों प्राप्त हो रही है, document.write eval

 var text = '<html><body bgcolor=linen><p>' + 
    'This is <b>bold<\/b>!<\/p><\/body><\/html>'; 

var tags = /[^<>]+|<(\/?)([A-Za-z]+)([^<>]*)>/g; 
var a, i; 
while ((a = tags.exec(text))) { 
    for (i = 0; i < a.length; i += 1) { 
     document.writeln(('// [' + i + '] ' + a[i]).entityify()); 
    } 
    document.writeln(); 
} 

मैं document.writeln() के साथ दोनों लाइनों पर ऊपर JSfiddle चेतावनी हो रही है।

+2

[मैं त्रुटि प्राप्त क्यों कर रहा हूं 'document.write eval का एक रूप हो सकता है'?] (Http://stackoverflow.com/questions/10609957/why-am-i-recieving-the-error-document- लिखना-कर-एक-फॉर्म-ऑफ-इवल) –

+0

और अधिक क्यू/ए: [\ [जावास्क्रिप्ट \] document.write eval] (http://stackoverflow.com/search?q= [जावास्क्रिप्ट] + दस्तावेज़ .write + eval) –

उत्तर

14

ध्यान दें कि यह केवल एक चेतावनी है - लेकिन एक अच्छा व्यक्ति जिसे सम्मानित किया जाना चाहिए। यह वास्तव में JSLint नामक चेकर द्वारा उत्पन्न किया जा रहा है - और इस चेतावनी के तर्क के लिए एक अच्छा पठन http://www.jameswiseman.com/blog/2011/03/31/jslint-messages-document-write-can-be-a-form-of-eval/ पर उपलब्ध है।

असल में, इसकी नींव यह है कि "eval is evil" - और document.write मूल्यांकन करने के लिए उपयोग किया जा सकता है।

इसके अलावा - और उपर्युक्त में उल्लिखित नहीं, जब भी संभव हो, document.write से बचें, शायद सरल परीक्षण के अलावा। यह डीओएम को "पूर्ण" माना जाता है, और इस बिंदु पर संशोधनों को केवल समर्थित डीओएम विधियों का उपयोग करके ही किया जाना चाहिए। इसके बारे में अतिरिक्त विवरण Why is document.write considered a "bad practice"? पर कवर किए गए हैं - जहां यह उल्लेख किया गया है कि यह "सुरक्षित और डोम अनुकूल DOM manipulation methods" (document.createElement, element.appendChild, आदि का उपयोग करने के लिए बेहतर है)। इसका एक अच्छा ठोस उदाहरण https://developer.mozilla.org/en-US/docs/Web/API/Document_object_model/Using_the_W3C_DOM_Level_1_Core पर उपलब्ध है।

+2

हर कोई कहता है कि यह बुरा है या यह अच्छा नहीं है। लेकिन कोई भी नहीं कहता है कि आप 'document.write' के बजाय * क्या * का उपयोग कर सकते हैं। मैं जेएस के लिए नया हूँ, मैं भी इस समस्या से मुलाकात की। मुझे अभी भी कोई जवाब नहीं मिला कि कैसे सुधार किया जाए। –

+0

@ JW.ZG - जैसा कि उल्लेख किया गया था, आपको इसके बजाय समर्थित DOM विधियों का उपयोग करना चाहिए। मैंने कुछ अतिरिक्त विनिर्देशों के साथ उत्तर का विस्तार किया है, जिसमें एक अच्छे ठोस उदाहरण के लिंक शामिल हैं, जिसे आप संदर्भित करना चाहते हैं। – ziesemer

+0

ओह, क्षमा करें, अब मैं समझता हूं। मुझे नहीं पता था कि 'document.getElementById' को डोम विधि कहा जाता है, जिसे वास्तव में कक्षा में मेरे प्रोफेसर द्वारा पेश किया गया है।囧 –