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

我在两行都使用document.writeln()收到上述JSfiddle警告。

最佳答案

请注意,这仅是警告-但应予以遵守。它实际上是由一个名为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提供了一个很好的具体示例。

关于javascript - 为什么我收到此jsfiddle错误,document.write可能是eval的一种形式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15048194/

10-12 01:42
查看更多