为了账号安全,请及时绑定邮箱和手机立即绑定

while的用法

while((b=b.parentNode)){}是理解成b!==a; b=b.parentNode;!!?

正在回答

3 回答

判断循环是否需要继续进行的条件并不一定是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>

控制台运行结果如下

http://img1.sycdn.imooc.com//564c1cfb00011bf804620147.jpg

可以看到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;


1 回复 有任何疑惑可以回复我~
#1

Siio 提问者

非常感谢!^_^
2015-11-26 回复 有任何疑惑可以回复我~

总觉得a,b写反了,难道不是while((a=a.parentNode)),再判断b===a,如果相等则true =>b包含a,,,,不懂,如果老师的是对的,那就是我理解错了,但是这里理解不了啊,求解答,谢谢

0 回复 有任何疑惑可以回复我~
#1

suiye1202

b是子节点,b=b.parentNode,即b的父节点赋值给b 如果赋值后的b==a,那么就说明赋值前的b是a的子节点,a是b的父节点。
2016-05-22 回复 有任何疑惑可以回复我~

很简单,(b=b.parentNode)这是一个赋值操作,把b.parentNode赋值给b,而不是判断语句,先赋值,然后判断(b=b.parentNode)这个整体,也就是b的父元素是否存在,如果存在,继续执行下面的判断:a==b,如果直至循环最后抛出异【null.parentNode不存在】a仍然不等于b,说明a不含b

4 回复 有任何疑惑可以回复我~
#1

Siio 提问者

感谢你,讲解的很明白!
2015-11-26 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

while的用法

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信