web-dev-qa-db-ja.com

このjsfiddleエラーが発生するのはなぜですか、document.writeはevalの形式である可能性があります

本を読んでいるときに見つけたコードをテストしています。 JSフィドルでテスト中にこのエラーが発生しました。_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警告が表示されます。

11
lboyel

これは単なる警告であることに注意してください-しかし、尊重されるべき良い警告です。これは実際には 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メソッドを使用してのみ行う必要があります。これに関する追加の詳細は document.writeが「悪い習慣」と見なされるのはなぜですか? -「安全でDOMフレンドリーなものを使用する方がはるかに良い DOM操作」」で説明されています。メソッド "(document.createElementelement.appendChildなど)。これの良い具体例は https://developer.mozilla.org/en-US/docs/Web/API/Document_object_model/Using_the_W3C_DOM_Level_1_Core で入手できます。

16
ziesemer