2013-02-24 4 views
6

Sto testando un codice che ho trovato mentre leggevo un libro. Ottengo questo errore durante il test in JS fiddle, document.write può essere una forma di valutazione.Perché sto ricevendo questo errore jsfiddle, document.write può essere una forma di valutazione

 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(); 
} 

sto ottenendo l'avvertimento JSfiddle sopra su entrambe le linee con document.writeln().

+2

[Perché sto ricevendo l'errore "document.write può essere una forma di valutazione"?] (Http://stackoverflow.com/questions/10609957/why-am-i-recieving-the-error-document- write-can-be-be-a-form-of-eval) –

+0

E altro Q/A: [\ [javascript \] document.write eval] (http://stackoverflow.com/search?q= [javascript] + documento .write + eval) –

risposta

14

Si noti che questo è solo un avvertimento, ma uno buono da rispettare. In realtà viene generato da un correttore chiamato JSLint - e una buona lettura per il ragionamento di questo avviso è disponibile al http://www.jameswiseman.com/blog/2011/03/31/jslint-messages-document-write-can-be-a-form-of-eval/.

Fondamentalmente, la base di questo è "eval is evil" - e che document.write può essere utilizzato per eseguire valutazioni.

Oltre a questo - e non menzionato in precedenza, evitare document.write quando possibile, tranne che per un semplice test. Scrive sul DOM dopo che è considerato "completo" e le modifiche a questo punto dovrebbero essere fatte solo usando i metodi DOM supportati. Ulteriori dettagli a riguardo sono trattati allo Why is document.write considered a "bad practice"? - dove si dice che è "Molto meglio usare la cassaforte e il DOM DOM manipulation methods" (document.createElement, element.appendChild, ecc.). Un buon esempio concreto di questo è disponibile allo https://developer.mozilla.org/en-US/docs/Web/API/Document_object_model/Using_the_W3C_DOM_Level_1_Core.

+2

Ognuno dice che questo è il male o questo non è buono. Ma nessuno dice che puoi usare * cosa * invece di 'document.write'. Sono nuovo di js, ho incontrato anche questo problema. Non ho ancora ricevuto risposta su come migliorare. –

+0

@ JW.ZG - come menzionato, è preferibile utilizzare i metodi DOM supportati. Ho ulteriormente ampliato la risposta con alcune specifiche aggiuntive, tra cui un collegamento a un buon esempio concreto a cui potresti voler fare riferimento. – ziesemer

+0

Oh, mi dispiace, capisco ora. Non sapevo che "document.getElementById" è chiamato metodo DOM, che in realtà è stato introdotto dal mio Prof. nella classe.囧 –