偽陣列是乙個物件(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方法的,所...