iT邦幫忙

0

同樣HTMLCollection為何一邊有查到長度,另一邊則沒有?

  • 分享至 

  • xImage

以下是我的codepen:
https://codepen.io/alanotmt/pen/gOeJvXK

在codepen裡console.log(add_bb)
他會顯示

[object HTMLCollection]{
"0":{}
"1":{}
"2":{}
"3":{}
"4":{}
"5":{}
"6":{}
"7":{}
"8":{}
"9":{}
"10":{}
}

我console.log(add_bb.length) 答案會是 11

但是我同樣的code在 xampp上跑 在網頁上按F12 看我console
卻得到這樣的結果:

HTMLCollection []
0: button.btnself.remove-button
1: button.btnself.remove-button
2: button.btnself.remove-button
3: button.btnself.remove-button
4: button.btnself.remove-button
5: button.btnself.remove-button
6: button.btnself.remove-button
7: button.btnself.remove-button
8: button.btnself.remove-button
9: button.btnself.remove-button
10: button.btnself.remove-button
length: 11
[[Prototype]]: HTMLCollection
data_setting.js:6 0

我console.log(add_bb.length) 答案會是 0
為什麼同樣的code 得出來的結果不一樣?

alanotmt iT邦新手 4 級 ‧ 2022-08-26 17:37:23 檢舉
後來發現 不同地方 在script 的後面是否增加了async


在 <script> 加上 async 屬性後,與 defer 相同的是會在背景執行下載,但不同的是當下載完成會馬上暫停 DOM 解析(若尚未解析完的話),並開始執行 JavaScript。也因為下載完成後會立即執行,加上 async 屬性後,就無法保證執行順序了。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1

先大約跟你說一下。javascript的奇怪特性。

首先要注意到的是,變數類型的自動轉換。
一般來說,object 類型其實是不存在 length 的。
也就是說 object 本身並沒有長度值存在。
而有時為何會突然出現長度值呢?

這就是好玩的地方了。
主要是看其KEY索引值。

一般物件宣告的同時。理論上來說。只要是索引值是非數字的。
在一些應用或是函數上。會將其直接視為 object 。也就造成了無長度值的問題。

但像你的KEY值是數字型的。則有時在一些函式或是應用上。
會自動將其視為 Array 看待。Array 是有 length 長度值的。

這就是javascript的千奇百怪的世界。

我要發表回答

立即登入回答