为什么我收到这个jsfiddle错误,document.write可以是eval的一种形式

lbo*_*yel 8 javascript jsfiddle

我正在测试我在读书时发现的代码.我在JS小提琴测试中得到这个错误,document.write可以是一种评估形式.

     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();
}   
Run Code Online (Sandbox Code Playgroud)

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

zie*_*mer 16

请注意,这只是一个警告 - 但应该是一个值得尊重的好警告.它实际上是由一个名为JSLint的检查程序生成的- 有关此警告推理的详细信息,访问http://www.jameswiseman.com/blog/2011/03/31/jslint-messages-document-write-可以是一种形式的评估/.

基本上,这个基础是" 评估是邪恶的 " - 并且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上找到.

  • 每个人都说这是邪恶的,或者说这不好.但没有人说你可以使用*what*而不是`document.write`.我是js的新手,我也遇到了这个问题.我仍然没有回答如何改进. (4认同)