1. ホーム
  2. javascript

[解決済み】なぜこのjsfiddleエラーが発生するのか、document.writeはevalの一種である可能性があります。

2022-01-27 02:34:16

質問

本を読んでいて見つけたコードをテストしています。JS fiddleでテストしているときに、このようなエラーが発生しました。 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();
}   

という2つの行で、上記のJSfiddleの警告が表示されます。 document.writeln() .

解決方法は?

これはあくまで警告であり、尊重されるべきものであることに注意してください。 というチェッカーによって生成されています。 JSLint - この警告の理由については、以下のサイトを参照してください。 http://www.jameswiseman.com/blog/2011/03/31/jslint-messages-document-write-can-be-a-form-of-eval/ .

基本的には、「"」というのが基本です。 evalは悪である " - そして、その document.write は、評価を行うために使用することができます。

このほかにも、上記では触れていませんが、以下のようなことも避けましょう。 document.write 可能な限り、簡単なテストを除いて、です。 DOM への書き込みは、それが "complete"とみなされた後に行われ、この時点での変更はサポートされている DOM メソッドのみを使用して行われるべきです。 この点に関する詳細は なぜdocument.writeはバッドプラクティスだと言われているのですか? - ここでは、安全で DOM フレンドリーな DOM操作の方法 " ( document.createElement , element.appendChild など)。具体的な良い例として、以下のものがあります。 https://developer.mozilla.org/en-US/docs/Web/API/Document_object_model/Using_the_W3C_DOM_Level_1_Core .