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

作者站长头像
站长
· 阅读数 17

我在学习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个回答
avatar
test
2024-07-12

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

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容