2013-02-24 9 views
6

私は本を読んでいる間に見つけたコードをテストしています。私はJSのフィドルでそれをテストしている間、このエラーを取得します。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

その他Q/A:[\ [javascript \] document.write eval](http://stackoverflow.com/search?q= [javascript] + document .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を避けてください。それは "完了"と見なされた後にDOMに書き込みます。この時点での修正は、サポートされているDOMメソッドを使用してのみ行う必要があります。これに関する追加の詳細は、Why is document.write considered a "bad practice"?でカバーされています。「安全でDOMに親しみやすいDOM manipulation methodsを使用する方がずっと良い」(document.createElementelement.appendChildなど)と記載されています。具体的な例としては、https://developer.mozilla.org/en-US/docs/Web/API/Document_object_model/Using_the_W3C_DOM_Level_1_Coreがあります。

+2

誰もがこれが悪いと言うか、これは良くないと言います。しかし誰もあなたが 'document.write'の代わりに* what *を使うとは誰も言いません。私はjsに新しいです、私はこの問題にも会った。私はまだ改善する方法には答えがありません。 –

+0

@ JW.ZG - 言及したように、代わりにサポートされているDOMメソッドを使用する必要があります。私はさらに、あなたが参照したいかもしれない良い具体的な例へのリンクを含む、いくつかの追加の詳細で答えを拡大しました。 – ziesemer

+0

ああ、申し訳ありません、私は今理解しています。私は 'document.getElementById'がDOMメソッドと呼ばれていることを知りませんでした。これは実際に私のProf.によってクラス内で導入されました。囧 –

関連する問題