Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 定义时未定义?_Javascript_Html - Fatal编程技术网

Javascript 定义时未定义?

Javascript 定义时未定义?,javascript,html,Javascript,Html,这是html: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <script type='text/javascript' src="myScript.js"></script&

这是html:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type='text/javascript' src="myScript.js"></script>
</head>
<body>

<p>hi</p>
</body>
</html>
第一个console.log显示“HTMLCollection[]”,第二个console.log显示“undefined”,这怎么可能呢

好的,我读了另一篇文章,所以我知道脚本应该在DOM下面,但是当第一个console.log发生在DOM之前时,它是如何工作的?


请不要将我的问题标记为重复,另一篇文章确实显示了解决方案,但它没有提到为什么第一个console.log会起作用

console.log(buyButtons)
记录了一个空数组,因为找不到dom元素

HTMLCollections
是随文档更改而更改的实时快照。。(
querySelectorAll
,是静态的,工作起来更直观)@Andreas
buyButtons[0]
没有定义一点都不奇怪,但我不能100%确定OP看到了什么/对HTMLCollection@Andreas很肯定OP已经明白了,这并不是他想要解决的问题,虽然这是一个实时的集合,可能会导致一些令人惊讶的控制台行为,但我不会把
HTMLCollection[]
算作这一意外的一部分<代码>[]看起来是空的,对吗?它的第0个元素未定义有什么出乎意料的?好吧,在看到Kokodoko回答中的“你需要点击它”评论后,自信地标记为重复。有。。你需要点击它这是真的,你可以只做
document.getElementsByTagName(“asdfghjkl”)它仍然不会是未定义的,因为它返回一个具有该标记名的元素列表,显然没有元素会具有该标记名,因此列表将为空。您为什么要谈论标记名?因为您使用的是
getElementsByTagName
。你是否因为不明白自己的问题而否决了投票?
var buyButtons = document.getElementsByTagName("p");
console.log(buyButtons)
console.log(buyButtons[0])