摘要:基本概念可以使用關(guān)鍵字創(chuàng)建。調(diào)用時(shí)傳入一個(gè)數(shù)組和一個(gè)函數(shù),內(nèi)部過程遍歷數(shù)組,并對(duì)數(shù)組中的每一項(xiàng)調(diào)用函數(shù),調(diào)用函數(shù)的時(shí)候會(huì)傳入兩個(gè)參數(shù),這個(gè)數(shù)組有項(xiàng),傳次,每次不一樣的不一樣的。會(huì)按照升序排列數(shù)組。
Array基本概念
Array可以使用new關(guān)鍵字創(chuàng)建 。
var a = new Array(1,2,3,4); === var a = Array(1,2,3,4); === var a = [1,2,3,4];
如果Array接受一個(gè)參數(shù),那么這個(gè)參數(shù)是length的長(zhǎng)度;
如果Array接受多個(gè)參數(shù),那么就不是length,是一個(gè)普通數(shù)組。
var a = Array(3) //會(huì)生成一個(gè)length=3的數(shù)組 var a2 = Array(3,3) //[3,3]
數(shù)組是特殊的對(duì)象,用對(duì)象創(chuàng)建數(shù)組(如下代碼),那和直接創(chuàng)建數(shù)組的區(qū)別是:用對(duì)象創(chuàng)建的數(shù)組沒有數(shù)組的原型(公有屬性),也就是說用對(duì)象創(chuàng)建數(shù)組,它的__proto__直接指向Object的原型,跳過Array的原型。一張圖說明prototype和__proto__的區(qū)別
var a = [1,2,3]; var obj = { 0:1, 1:2, 2:3, length:3};forEach、map、filter、reduce
forEach接受一個(gè)函數(shù),這個(gè)函數(shù)接受三個(gè)參數(shù)(value,key,array),value是array的元素,key是array的索引,array是forEach正在操作的數(shù)組(可選)。
如果自己創(chuàng)建一個(gè)forEach函數(shù)會(huì)怎么寫呢?
先自己創(chuàng)建一個(gè)forEach函數(shù),它接收兩個(gè)參數(shù)(array,fn),array是數(shù)組,fn是函數(shù);然后在內(nèi)部遍歷array,同時(shí)調(diào)用fn函數(shù),并傳入兩個(gè)參數(shù)(value,key)array的第一項(xiàng)是value,array的索引是key。
function forEach(array,fn){ for(var i = 0; i < array.length; i++){ fn(array[i],i); } } forEach(["aa","bb","cc","dd","ee","ff"].function(value,key){ console.log(value,key); } /* aa 0 bb 1 cc 2 dd 3 ee 4 ff 5 */ })
調(diào)用foreach時(shí)傳入一個(gè)數(shù)組和一個(gè)函數(shù),內(nèi)部過程:遍歷數(shù)組,并對(duì)數(shù)組中的每一項(xiàng)調(diào)用函數(shù),調(diào)用函數(shù)的時(shí)候會(huì)傳入兩個(gè)參數(shù)(value,key),這個(gè)數(shù)組有6項(xiàng),傳6次,每次不一樣的value不一樣的key。
再來看forEach這個(gè)API(如下代碼) ,它接受一個(gè)函數(shù),這個(gè)函數(shù)接受兩個(gè)參數(shù)(value,key),那么它為什么只接受一個(gè)函數(shù)作為參數(shù)了,數(shù)組去哪里了?
var a = ["aa","bb","cc","dd","ee","ff"]; a.forEach(function(value,key){console.log(value,key)});
看一下a.forEach內(nèi)部過程。首先創(chuàng)建一個(gè)obj的對(duì)象,它內(nèi)部沒有forEach這個(gè)方法,在外面給它強(qiáng)行添加forEach,然后就像普通對(duì)象一樣調(diào)用forEach就可以了。
var obj = { 0:"a", 1:"b", length:2 }; obj.forEach = function(fn){ for(var i = 0; i < this.length; i++){ fn(this[i],i); } } obj.forEach(function(value,key){console.log(value,key)});
forEach遍歷數(shù)組每一項(xiàng),map和forEach的區(qū)別是map有返回值。filter有條見的篩選。
先調(diào)用filter篩選出偶數(shù),再調(diào)用map乘上2,得出結(jié)果
var a = [1,2,3,4,5,6,7,8,9]; a.filter(function(value){ return value % 2 === 0 }).map(function(value2){ return value2 * value2; }); // [4,16,36,64]
用reduce代替map和filter
var a = [1,2,3,4,5,6,7,8,9] a.reduce(function(arr,n){ arr.push(n*2); return arr; },[]); //[2,4,6,8,10,12,14,16,18] a.reduce(function(arr,n){ if(n % 2 === 0){ arr.push(n); } return arr; },[]); //[2,4,6,8,10]sort重排序方法
reverse反向排序數(shù)組項(xiàng),原數(shù)組也被逆序了。
sort會(huì)按照升序排列數(shù)組。
sort可以接受一個(gè)比較函數(shù)作為參數(shù),可以實(shí)現(xiàn)降序排列
var students = ["小明","小紅","小花"]; var scores = { 小明: 59, 小紅: 99, 小花: 80 }; students.sort(function (value1,value2){return scores[value2] - scores[value1]});
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/94956.html
摘要:原始緩沖區(qū)的創(chuàng)建通過這個(gè)構(gòu)造函數(shù)可以創(chuàng)建一個(gè)原始緩沖區(qū)從控制臺(tái)可以看到實(shí)例擁有一個(gè)的屬性,用于獲取的,一個(gè)只有以及支持的方法,用于對(duì)長(zhǎng)度進(jìn)行截取操作。所有數(shù)組類型的長(zhǎng)度均固定。 本文同步自我的博客園:http://www.cnblogs.com/hustskyking/ 相信每一個(gè) javascript 學(xué)習(xí)者,都會(huì)去了解 JS 的各種基本數(shù)據(jù)類型,數(shù)組就是數(shù)據(jù)的組合,這是一個(gè)很基本...
摘要:反正就是相反的意思了異或當(dāng)兩者中只有一個(gè)那么結(jié)果才為。將指定根據(jù)的標(biāo)識(shí)轉(zhuǎn)換成為進(jìn)制。當(dāng)創(chuàng)建實(shí)例的構(gòu)造函數(shù)時(shí),內(nèi)部會(huì)同時(shí)創(chuàng)建一個(gè)用來作為數(shù)據(jù)的存儲(chǔ)。不過,根據(jù)上面的構(gòu)造函數(shù)上看,其實(shí),可以將一整個(gè)拆成不同的進(jìn)行讀取。 Web 進(jìn)制操作是一個(gè)比較底層的話題,因?yàn)槠匠W鰳I(yè)務(wù)的時(shí)候根本用不到太多,或者說,根本用不到。 老鐵,沒毛病 那什么情況會(huì)用到呢? canvas websocket fi...
閱讀 3230·2023-04-26 02:27
閱讀 2145·2021-11-22 14:44
閱讀 4107·2021-10-22 09:54
閱讀 3203·2021-10-14 09:43
閱讀 759·2021-09-23 11:53
閱讀 12747·2021-09-22 15:33
閱讀 2715·2019-08-30 15:54
閱讀 2691·2019-08-30 14:04