前言
一位正在學習前端的菜鳥,雖菜,但還未放棄,
內容
首先,我們都知道每個陣列都有一個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這些添加和洗掉的方法也就對這些屬性無效了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/18366.html
標籤:JavaScript
上一篇:南京智數科技有限公司怎么樣?
