美文网首页
JS开发中最常见也是最不好排查的错误之一

JS开发中最常见也是最不好排查的错误之一

作者: wfmm1990 | 来源:发表于2017-06-30 16:59 被阅读0次
    好多写前端JS的开发者经常在修改代码(不管是自己的还是别人的)的时候经常会出现修改了某个元素节点之后接下来的代码无法执行,或者报一些莫名其妙的错误,但是当你检查代码的时候又会发现代码逻辑或者语法没有一点错误。这就很让人蛋疼了……
    一般出现这样的问题通常都是使用选择器的时候,如果当选择器指定的元素绩点不存在,代码执行到这一步的时候就会停止,然后报一个错误,诸如
    "Uncaught TypeError: Cannot set property 'innerHTML' of null"   /AJAX_TEST/selector_test.html (43)
    
    来看下面这段代码:
    <!DOCTYPE html>
    <html>
        <head>
            <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
            <meta charset="UTF-8">
            <title></title>
            <style type="text/css">
                html,body{
                    height: 100%;
                    width: 100%;
                    padding: 0px;
                    margin: 0px;
                    background-color: darkred;
                }
                #div1{
                    width: 100%;
                    height: 30%;
                    background-color: darkolivegreen;
                }
                
                .div2{
                    width: 100%;
                    height: 30%;
                    background-color: darkturquoise;
                }
                
                .div3{
                    width: 100%;
                    height: 30%;
                    background-color: darkturquoise;
                }
            </style>
        </head>
        <body>
            <div id="div1">
                <!--<div class="div3"></div>-->
            </div>
            
            <div class="div2">
            </div>
            
            <script type="text/javascript">
                document.querySelector("#div1 > div").innerHTML = "first div";
                alert("111111111111");
            </script>
        </body>
    </html>
    

    当我们运行这段代码的时候报出了一个错误

    "Uncaught TypeError: Cannot set property 'innerHTML' of null"   /AJAX_TEST/selector_test.html (43)
    

    这个时候我们只要根据错误提示找到出错的地方(43)行,这个时候我们会发现这段代码

    document.querySelector("#div1 > div").innerHTML = "first div";
    

    出错的原因就是

    document.querySelector("#div1 > div")
    

    该选择器找不到该元素节点,然后我们根据选择器找到节点

    <div id="div1">
        <!--<div class="div3"></div>-->
    </div>
    

    发现该元素节点被注释掉了,我们将该注释取消就OK了。

    相关文章

      网友评论

          本文标题:JS开发中最常见也是最不好排查的错误之一

          本文链接:https://www.haomeiwen.com/subject/bncicxtx.html