为何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个回答

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

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