一文讀懂JS偽陣列和陣列的區別

2021-09-28 20:26:58 字數 2621 閱讀 3664

你越是認真生活,你的生活就會越美好——弗蘭克·勞埃德·萊特

《人生果實》經典語錄

偽陣列是乙個物件(object),而真實的陣列是乙個陣列(array)

擁有length屬性,且必須是number型別,其它屬性(索引)為字串不具有陣列所具有的方法,foreach()等,不過有object的方法

偽陣列長度不可變,真陣列長度可以變

可以通過for in遍歷

var fakearray =

var arr =[1

,2,3

,4]// 真陣列的方法來自array.prototype

console.

log(fakearray instanceof

array

)//false

console.

log(arr instanceof

array

)// true

array.

isarray

(fakearray)

// false;

array.

isarray

(arr)

// true;

console.

log(arr.__proto__ === array.prototype)

// true

console.

log(fakearray.__proto__ === array.prototype)

// false

console.

log(fakearray.__proto__ === object.prototype)

// true

arr.

foreach

(x => console.

log(x)

)// 1 2 3 4

fakearray.

foreach

(x => console.

log(x)

)// fakearray.foreach is not a function

object.

keys

(fakearray)

// ["0", "1", "2", "length"]

引數陣列:arguments

dom物件列表htmlcollection():比如通document.getelementsbytagname得到的列表

jquery物件:比如$(「div」)

使用array.prototype.slice.call();

var fakearray =

// 將偽陣列轉換為真陣列

var arr = array.prototype.slice.

call

(fakearray)

console.

log(arr)

// ["first", "second", "third"]

array.

isarray

(arr)

// true

console.

log(arr instanceof

array

)// true

arr.

foreach

(x => console.

log(x)

)// first second third

使用.slice.call()

var fakearray =

var arr =

.slice.

call

(fakearray)

console.

log(arr)

// ["first", "second", "third"]

使用es6中的array.from方法

var fakearray =

var arr = array.

from

(fakearray)

console.

log(arr)

// ["first", "second", "third"]

使用擴充套件運算子,也是es6的語法

var fakearray = document.

queryselectorall

('div'

)var newarr=

[...fakearray]

console.

log(newarr.__proto__ === array.prototype)

// true

array.prototype.

slice

=function

(start, end)

return arr

}

謝謝你閱讀到了最後~

讓我們一起 變得更強

vue原始碼學習完整目錄

陣列與鍊錶 一文讀懂

資料結構是軟體開發中最基礎的部分了,它體現著我們程式設計的內功。大多數人在正兒八經學習資料結構的時候估計是在大學計算機課上,而在實際專案開發中,反而感覺到用得不多。其實也不是真的用得少,只不過我們在使用的時候被很多高階語言和框架元件封裝好了,真正需要自己去實現的地方比較少而已。但別人封裝好了不代表我...

一文讀懂最簡單的資料結構 陣列

專欄目錄 資料結構與演算法解析 定義 有序的元素序列,陣列是用來儲存具有 一對一 邏輯關係的資料的線性儲存結構,由於在各種程式語言中常把陣列作為基本資料型別來使用,很多人會誤解陣列不是儲存結構。通常我們根據不同的結構特性將陣列分為三類 一維陣列,二維陣列和多維陣列 儲存 n 1 維陣列的陣列,不做過...

一文讀懂之 與equals的區別

答案是沒有區別。是不是很吃驚!我們一般認為的區別是 進行數值比較。equals進行物件 字串 內容 比較。直接用equals比較兩個物件,比較的是物件在堆記憶體中的首位址。所以除非棧種引用的是同乙個首位址,否則都不想等。來看jdk原始碼。sun公司的程式設計師底層也是用 來定義equals方法的,所...