Javascript 为什么此函数总是返回“true1”

Javascript 为什么此函数总是返回“true1”,javascript,Javascript,这是《雄辩的JavaScript》一书中示例的一个修改版本。需要理解为什么它总是返回true 1。其想法是在DOM中找到某个文本,但不知何故,即使我给出了一个html中不存在的文本,在控制台上仍然会得到true1 请帮忙 我的HTML文件: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>

这是《雄辩的JavaScript》一书中示例的一个修改版本。需要理解为什么它总是返回true 1。其想法是在DOM中找到某个文本,但不知何故,即使我给出了一个html中不存在的文本,在控制台上仍然会得到true1

请帮忙

我的HTML文件:

<!DOCTYPE html>

 <html> 
    <head>      
        <meta charset="UTF-8" />        
        <title> My first JS page</title>
        <script src="script1.js"></script>
    </head> 
    <body>      

        <h1>My first page</h1>
        <p> Hello , I am Mehdi and this is my first page</p>
        <p> And this is the second paragraph on this page and</p>
    </body>
 <script>console.log(talksAbout(document.body, "Tester123"));</script>
</html>
我的Javascript文件

function talksAbout(node, string){

    if(node.nodeType == document.ELEMENT_NODE){

        for(var i=0; i<node.childNodes.length; i++){

            if(talksAbout(node.childNodes[i], string))
                return "true1";
        }
        return "false1";
    }else if(node.nodeType == document.TEXT_NODE){

        return node.nodeValue.indexOf(string) > -1;
    }


}

函数使用talksAbout函数的返回值,就像它是布尔值一样。但是,该函数可以返回布尔值,也可以返回这两个字符串值中的一个,即true1或false1。当在类似于递归调用周围的if语句的布尔上下文中使用时,这两种情况看起来都是正确的。

您的函数使用talksAbout函数的返回值,就像它是布尔值一样。但是,该函数可以返回布尔值,也可以返回这两个字符串值中的一个,即true1或false1。当在类似于递归调用的if语句的布尔上下文中使用时,这两种情况都是正确的。

Pointy的回答描述了两个关键问题之一。另一个是,您的搜索字符串实际上在文档中

将脚本标记与搜索字符串一起作为文档的一部分。它将在遍历DOM时得到检查,因此即使在修复布尔值之后,只要文档中有这样的行,仍然会返回true:

<script>console.log(talksAbout(document.body, "Tester123"));</script>
                                               ^^^^^^^^^  

您只需从web开发人员控制台运行一个测试,就可以看到它运行时不会出现这样的问题。

Pointy的回答描述了两个关键问题之一。另一个是,您的搜索字符串实际上在文档中

将脚本标记与搜索字符串一起作为文档的一部分。它将在遍历DOM时得到检查,因此即使在修复布尔值之后,只要文档中有这样的行,仍然会返回true:

<script>console.log(talksAbout(document.body, "Tester123"));</script>
                                               ^^^^^^^^^  

您只需从web开发人员控制台运行一个测试,就可以看到它运行时不会出现这样的问题。

您是否使用浏览器工具调试了代码?true1和false1字符串都是真布尔值,因此无论talksAbout返回什么,iftalksAbout。。将始终执行then块。是否使用浏览器工具调试代码?true1和false1字符串都是真布尔值,因此无论talksAbout返回什么,iftalksAbout。。将始终执行then块。这是正确的,但请注意,我的答案中还有另一个问题。这是正确的,但请注意,我的答案中还有另一个问题。是的,我同意,字符串在文档中!是的,我同意,字符串在文档中!