Javascript 定义时未定义?
这是html: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>
<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
,是静态的,工作起来更直观)@AndreasbuyButtons[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])