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