为何try catch中的报错没有触发?

我在学习javascript用xpath解析html文档。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <ul>
        <li>th1 node</li>
        <li>th2 node</li>
        <li>th3 node</li>
        <li>th4 node</li>
        <li>th5 node</li>
    </ul>
    <script charset="utf-8" type="text/javascript" >
    var documentNode=document.body;
    const iterator1 = document.evaluate('//li', documentNode, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
    try {
      let thisNode = iterator1.iterateNext();
      while (thisNode) {
        console.log(thisNode.textContent);
        thisNode = iterator1.iterateNext();
      }
    }
    catch(e) {
      console.log(`Error: Document tree modified during iteration ${e}`);
    }
    const iterator2 = document.evaluate('//p', documentNode, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
    try {
      let thisNode = iterator2.iterateNext();
      while (thisNode) {
        console.log(thisNode.textContent);
        thisNode = iterator2.iterateNext();
      }
    }
    catch(e) {
      console.log(`Error: Document tree modified during iteration ${e}`);
    }
    </script>
</body>
</html>

上面的html文件,

const iterator1 = document.evaluate('//li', documentNode, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);

可以得到正确的结果,这个很正常。
现在换用

const iterator2 = document.evaluate('//p', documentNode, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);

节点p根本就不存在文档中,

    try {
      let thisNode = iterator2.iterateNext();
      while (thisNode) {
        console.log(thisNode.textContent);
        thisNode = iterator2.iterateNext();
      }
    }
    catch(e) {
      console.log(`Error: Document tree modified during iteration ${e}`);

这里的try catch中的console.log 没有error信息输出。
Error: Document tree modified during iteration
请问,原因在哪里?

阅读 1.6k
1 个回答

没有找到p,应该是返回了Null,不满足循环,while里面的Null.属性也不会执行就不抱错呗

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题