一、創建數組 使用 new 操作符調用構造函數 var arr = new Array(20) // 創建了一個包含20項的數組 var arr = new Array('a', 'b', 'c') // 創建了包含字元串 a b c 的三項數組 省略 new 操作符 var arr = Array ...
一、創建數組
使用 new 操作符調用構造函數
var arr = new Array(20) // 創建了一個包含20項的數組
var arr = new Array('a', 'b', 'c') // 創建了包含字元串 a b c 的三項數組
省略 new 操作符
var arr = Array(20)
var arr = Array('a', 'b', 'c')
數組字面量
var arr = []
var arr = ['a', 'b', 'c']
【ES6】、Array.of()
- 描述:
用於創建數組,用法和 new Array() 一樣。彌補 Array() 構造函數的不足(即參數不同,行為不同),Array.of() 的行為始終一致,將傳入的值作為數組的項,產生數組
- 參數:任意數量任意值
- 返回值:創建的數組
【ES6】、Array.from(obj, func, context)
- 描述:用於將 類數組對象(擁有length屬性的對象) 和 可遍歷對象(部署iterable介面的對象,包括 Set/Map) 轉為真正的數組
- 參數:
{Object} obj
要轉為數組的對象{Function} func
一個函數,功能類似於數組的map方法,對每一個對象屬性執行該函數,並返回由該函數的返回值組成的數組{Object} context
第二個函數參數的執行環境(this指向)
- 返回值:生成的數組
二、數組檢測
使用 instanceof 操作符
if(value instanceof Array){
// 對數組執行某些操作
}
使用 Array.isArray() 方法
if(Array.isArray(value)){
// 對數組執行某些操作
}
使用 Object.prototype.toString.call()
if(Object.prototype.toString.call(obj) === '[object Array]'){
// 對數組執行某些操作
}
三、數組方法
轉換方法
toLocalString()
toString()
valueOf()
join()
棧/隊列 方法
push()
- 描述:向數組的尾部追加項,並返回數組長度
- 參數:n多個值,會依次推入數組尾部
- 返回值:
{Number}
數組長度
- 是否改變原數組:是
pop()
- 描述:移除數組最後一項,並返回該項
- 參數:無
- 返回值:返回移除項
- 是否改變原數組:是
shift()
- 描述:移除數組第一項,並返回該項
- 參數:無
- 返回值:返回移除項
- 是否改變原數組:是
unshift()
- 描述:在數組最前端添加項,並返回數組長度
- 參數:n多個值,會依次添加到數組前端
- 返回值:
{Number}
數組長度
- 是否改變原數組:是
排序方法
reverse()
- 描述:反轉數組項的順序
- 參數:無
- 返回值:修改後的數組
- 是否改變原數組:是
sort()
- 描述:對數組進行排序,預設情況下,按照升序排序,sort方法調用每個數組項的 toString() 方法,進行字元串比較
- 參數:【可選】函數
1、如果第一個參數 應該位於 第二個參數 之前 返回一個負數 2、如果第一個參數 應該位於 第二個參數 之後 返回一個正數 3、併列返回0
- 返回值:排序後的數組
- 是否改變原數組:是
####操作方法
concat()
- 描述:基於當前數組的所有項創建一個新數組
- 參數:【可選】任意數量的任意值
- 返回值:返回新數組
- 是否改變原數組:否
slice()
- 描述:基於當前數組一或多個項創建新數組(截取數組片段)
- 參數:接收一或兩個參數,分別是返回項的起始和結束位置
- 返回值:
1、只傳起始位置(即一個參數) 返回:從起始位置到數組末尾的項組成的數組 2、傳遞兩個參數 返回:從起始位置到結束位置(不包含結束位置)的項組成的數組 3、傳遞負數 返回:會用數組長度加上該負數來確定相應的位置,並按照1、2的規則返回新數組 4、起始位置大於結束位置 返回:空數組
- 是否改變原數組:否
splice()
- 描述:對數組的項進行 刪除、插入、替換 等操作,功能十分強大
- 參數:
第一個參數:要刪除的第一項的位置 第二個參數:要刪除的項數 第三個參數(第四個、第五個......):插入的項
- 返回值:由刪除的項組成的數組
- 是否改變原數組:是
【ES6】copyWithin()
- 描述:在數組內部,將指定位置的成員拷貝到其他位置(會覆蓋原有成員)
- 參數:
第一個參數:要拷貝的目標位置(target) 第二個參數:從該位置讀取數據,預設是0,負值表示倒數 第三個參數:讀取到該位置結束,預設是 數組的長度,不包含該位置,負值表示倒數
- 返回值:修改後的數組
- 是否改變原數組:是
【ES6】fill()
- 描述:使用給定值,填充數組
- 參數:
第一個參數:填充的值 第二個參數:填充的起始位置 第三個參數:填充的結束位置(不包含該位置)
- 返回值:(待測)
- 是否改變原數組:是
查找/位置方法
indexOf()
lastIndexOf()
- 描述:在數組中查找某一項的位置 indexOf() 從前往後查找, lastIndexOf() 從後往前查找
- 參數:
第一個參數:要查找的項 第二個參數:查找起點位置索引
- 返回值:返回查找項在數組中的位置,未找到返回-1
註意:在查找過程中使用全等操作符(===)
【ES6】find()
- 描述:用於找到第一個符合條件的數組成員
- 參數:一個函數,函數的參數:1、項。2、項的索引。3、數組對象本身
- 返回值:如果有符合添加的項,返回該項的值,如果沒有找到符合條件的項,返回
undefined
【ES6】findIndex()
- 描述:與find()方法功能一樣,唯一不同的是,返回的是項的位置,未找到返回 -1
【ES7】includes()
- 描述:查找數組中是否包含給定值
- 參數:
第一個參數:要查找的值 第二個參數:查找的起始位置,預設是0,負數表示倒數,查出範圍會重置為0
- 返回值:
true
包含,false
不包含
includes 相比於 indexOf 的優勢有兩點:1、更加語義化,不需要判斷返回值是否為 -1。2、由於 indexOf 底層在判斷是否相等時使用的是全等操作符 ===,這會導致使用 indexOf 查找 NaN 時查不到,而 includes 則不存在這樣的問題
迭代方法
forEach()
every()
some()
filter()
map()
描述:迭代數組,對數組的每一項執行給定函數
參數:第一個參數:函數
函數接收三個參數
1、數組的項
2、該項在數組中的位置
3、數組對象本身
第二個參數:第一個參數的執行環境(this指向)
返回值:
forEach() 無返回值
every() 對數組運行給定函數,如果該函數對每一項都返回true,則返回true
some() 對數組運行給定函數,如果該函數對任意一項返回true,則返回true
filter() 對數組執行給定函數,返回該函數返回true的項組成的數組
map() 對數組執行給定函數,返回每次函數調用結果組成的數組
【ES6】entries(),keys()和values()
- 描述:
entries()
,keys()
和values()
都用於遍曆數組。它們都返回一個遍歷器對象(詳見《Iterator》一章),可以用for...of
迴圈進行遍歷,唯一的區別是keys()
是對鍵名的遍歷、values()
是對鍵值的遍歷,entries()
是對鍵值對的遍歷。
歸併方法
reduce()
reduceRight()
- 描述:迭代數組的所有項,構建一個最終的返回值
- 參數:
第一個參數:函數,函數接收的參數: 1、前一項(pre) 2、當前項(cur) 3、當前項的索引(index) 4、數組對象本身(array) 第二個參數:歸併的初始值
- 返回值:迭代的最終值
註意:第一次迭代的時候,pre是數組的第一項,cur是數組的第二項,reduce() 和 reduceRight() 除了迭代方向不一致外,其他完全相同