Siio
2015-11-14 22:28
while((b=b.parentNode)){}是理解成b!==a; b=b.parentNode;!!?
判断循环是否需要继续进行的条件并不一定是b!==a 注意老师的代码写在了try catch块中 这里我写了个简单的测试
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>null or exception test</title> </head> <body> <h1 id="header">Test</h1> </body> <script> var node = document.getElementById("header"); while(true){ try{ console.log(node = node.parentNode); }catch(e){ console.log(e); break; } } console.log("-------------end------------"); </script> </html>
控制台运行结果如下
可以看到HTMLDocument的父节点为null,在老师的代码中,当【b=HTMLDocument】时,再执行while( (b=b.parentNode) ),即执行了while(null),此时循环条件不满足,程序不进入循环向下执行return false
另外通过test的运行结果可以看到对null使用parentNode会抛异常
所以你的问题while((b=b.parentNode)){}应当理解成 在不抛出异常的情况下,if( b || (b!==a) ) ; b=b.parentNode;
总觉得a,b写反了,难道不是while((a=a.parentNode)),再判断b===a,如果相等则true =>b包含a,,,,不懂,如果老师的是对的,那就是我理解错了,但是这里理解不了啊,求解答,谢谢
很简单,(b=b.parentNode)这是一个赋值操作,把b.parentNode赋值给b,而不是判断语句,先赋值,然后判断(b=b.parentNode)这个整体,也就是b的父元素是否存在,如果存在,继续执行下面的判断:a==b,如果直至循环最后抛出异【null.parentNode不存在】a仍然不等于b,说明a不含b
DOM探索之基础详解篇
98374 学习 · 238 问题
相似问题