JavaScript標準庫(25)

JavaScript標準庫目錄:

上一次咱們簡單的介紹了Object() String() Number() Boolean()而今天這個博客我在原來的基礎上對Array() Function()進行了補充.獲取更多相關的知識還能夠經過 阮一峯標準參考教程MDN-JavaScript標準庫 javascript

簡單變量與new 對象()區別

對於簡單變量來講,賦值就是一個簡單的賦值,而對於new String()來講賦值等於建立了一個String對象

數組

數組的建立類型:

第一種:(1)let fruit = new Array("apple","orange","banana")
第二種:(2)let fruit = ["apple","orange","banana"] java

上述兩種表達方法目的都是同樣,只不過new Array()尊重了創始人的意願使得JS更加像Java而已。

Array()的用法:

而當數組的參數爲1個的時候,例如var a = Array (3)時就要思考一下:
第(1)種可能生成了一個數組,第一個數爲3
第(2)種可能生成了一個length爲3的數組
數組

結果很明顯是第二種,並且這個數組種的任意數字都沒法肯定,不是0!!!
當參數爲2個的時候,數組的表示則爲正常
因此經過內存圖能夠直觀的發現數組的不一致性:
Array()的寫法:

小總結:

函數function()

函數的建立類型:

(1):var f = function(a,b){ return a + b ;}
(2):var f = Function(){'a' , 'b' , 'return a + b'} //加不加new都同樣
上述兩種方式都是表達了兩種用於計算a+b的值。第一種主要介紹了通常函數的表達方式,第二種主要介紹了構造函數的表達方式,前面的'a','b'表示參數,'return a+b'表示函數體bash

函數的表達方式:

(1)具名函數 function f(){ return undefined; //若是沒有寫,默認添加 } (2)匿名函數 function(){ } (3)構造函數 new Function('x','y','return x+y')app

數組和forEach

Array(),Function()與Object()的區別:
這樣一種遍歷只能顯示length裏面的內容,若是想要遍歷另外一種方法就必須使用下面的這種方法:
另一種更加簡單的表示方法:
僞數組:就是沒有指向 Array.prototype的內容咱們稱之爲僞數組,也就是說僞數組沒有push,pop,__proto__功能

在JavaScript中只有一個僞數組:arguments

經常使用的數組API:forEach()

a = ['a','b','c']
a.forEach( function(x,y)){
  console('value',x)
  console('key',y)
}
複製代碼

很明顯上面的代碼先執行 console.log('我接收到了一個函數')而後會找 y(),發現 y()對應的 function()console.log(2)返回的是2,接着執行最後一句函數 console.log('而且我執行了這個函數')
主要是找y()是指原函數對應的函數。一樣,使用 y.call()同樣也是能夠執行函數:

經過函數的方式解釋forEach():

function forEach(array , x){
  for(let i = 0; i<array.length;i++){
     x(array[i],i)
  }
}
forEach(['a','b','c'] , function(value, key){
       console.log(value , key)
  }
)
// a  0
   b  1
   c  2
複製代碼

經過forEach來解釋:函數

var a = ['a','b','c'];
a.forEach(function(x,y){
  console.log(x,y)
})
// a 0
   b 1
   c 2
其實a.forEach()自己就是一個函數,當你寫a.forEach(function(){})等價於a.forEach.call(a , function(){})
複製代碼

forEach()和sort()原理

經過上述的簡單理解咱們能夠知道forEach主要是用來遍歷數組,並且forEach()必定會接受三個參數:第一個參數必定是value,第二個參數必定是key,第三個參數必定是這個數組的自己 eg:ui

var a = ['aaa' , 'bbb' , 'ccc']
  a.forEach(function(b,c,d){
  console.log(b,c,d)
})
// aaa  0 ['aaa' , 'bbb' , 'ccc']
   bbb  1 ['aaa' , 'bbb' , 'ccc'] 
   ccc  2 ['aaa' , 'bbb' , 'ccc']
複製代碼

sort()對數組進行排序 默認狀況下是進行從小到大排序

a = [2,4,5,6,7,1,3] 
a.sort()
//a = [1,2,3,4,5,6,7]
複製代碼

若是想進行從大到小排序要進行設置:

a = [2,4,6,7,3,1,5]
a.sort( function(x,y) {return x- y})   //返回的數字是負數,進行從小到大排序
a.sort( function(x,y) {return y- x})   //返回的數字是正數,進行從大到小排序
複製代碼

對於更復雜(姓名)的順序排列:spa

var people = ['阿里','百度','騰訊']
var money = {
  百度:3,
  阿里:1,
 騰訊:2
}
people.sort( function(x,y){return money[x] -money[y] })  //阿里,騰訊,百度
people.sort( function(x,y){return money[y] -money[x] }) //百度,騰訊,阿里
複製代碼

其餘數組API

join(),contact(),map(),filter(),reduce() join()至關於鏈接符 eg:prototype

var a = [1,2,3]
a.join('你好')
//1你好2你好3
複製代碼

數組變字符串 var a = [1,2,3] a.join(',') // "1,2,3" contact()數組的鏈接3d

var a = [1,2,3]
var b =[4,5,6]
var c = a.contact(b)      var c =a.contact([]) //獲得一個新數組
//c [1,2,3,4,5,6]
複製代碼

map()把函數返回的每個值收集起來獲得一個新的數組

var a = [1,2,3]
a.map( function(value , key){return value*2})        //2,4,6
a.map(value =>value *2)  //2,4,6 
a.map(value =>value *3) //3,6,9
複製代碼

上述兩種結果實現方法一致。箭頭函數更簡潔,function()更加讓人容易理解
filter()過濾數組中的內容
經過數組中的具體內容進行篩選,和map()類型也有兩種方式進行,一種是傳統的函數,一種是箭頭函數

map()和filter()的混合使用:
(1)獲得一個數組的全部偶數
(2)獲得全部偶數的平方

var a = [1,2,3,4,5,6,7,8,9]
a.filter(value =>value%2===0).map(value =>value*value)
//4,16,36,64
複製代碼

reduce()減小數組或者壓縮數組

var a =[1,2,3,4,5,6,7,8,9]
a.reduce(function(sum,n){
  return sum+n
},0) //sum表示上一次結果的和,n是一次的值,sum+n是相加的結果,0是初始的值
複製代碼
相關文章
相關標籤/搜索