11

我正在测试我在读书时发现的代码。我在 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();
}   

我在两行都收到了上面的 JSfiddle 警告document.writeln()

4

1 回答 1

18

请注意,这只是一个警告 - 但应该受到尊重。它实际上是由一个名为JSLint的检查器生成的——关于这个警告的推理,可以在http://www.jameswiseman.com/blog/2011/03/31/jslint-messages-document-write-可以是 eval/ 的形式

基本上,其基础是“ eval 是邪恶的” -document.write可用于执行评估。

除此之外 - 上面没有提到,document.write尽可能避免,除了可能是简单的测试。它在被认为“完成”后写入 DOM,此时只能使用支持的 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提供了一个很好的具体示例。

于 2013-02-24T03:09:13.207 回答