淺談js數組中的length屬性


前言

  一位正在學習前端的菜鳥,雖菜,但還未放棄。

內容

  首先,我們都知道每個數組都有一個length屬性 這個length屬性一般我們用來循環遍歷的約束,一般我們都會把他認為是該數組里面有幾個元素這個length就是多少-1(因為數組下標是從0開始的) 但實際上他並不是這個樣子的 看下圖:

  從上面那張圖我們可以看到arr中的length居然是0  而二三行的代碼也是執行有效的 是能夠打印出來的 這又是為什么呢?

  帶着這個問題 我們再來看以下一張圖

  從上面那張圖我們可以看到arr中的length居然又莫名其妙的變成了11 這整的是不是有點懵逼了???不要緊 我們來看一下arr整個數組打印出來究竟是個啥

  其實前面的empty * 10 就是[undefined,undefined......] 即arr[0] = undefined,arr[1] = undefined ......

  再繞回來,為什么數組的下標是11呢?

  其實是js中數組的length是根據數組的下標最大值來決定的,這個最大值只能是0到2的32次方這個范圍內,如果不是這個范圍內,js內部會先將這個下標進行隱式轉換

  即arr["10"]= 10 等於arr[10] = 10 其實這句話會在數組里面創建11(因為數組下標是從0開始的)個項,沒有值的項就用undefined來占位 所以這里的length 才是11

  那再看回來arr這個數組,為什么會存在a下標與b下標呢?

  其實在js中數組的下標是不能存在字符串的,但如果我們嘗試着把字符串作為下標使用,其實js會把這個認為是屬性來看待,就像我們的對象一樣,以鍵值對的形式存在。

  當然,既然是被當做是屬性,那么像push,pop這些添加和刪除的方法也就對這些屬性無效了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM