JavaScript讀書筆記(6)-Array RegExp

一、Array類型前端

ECMAScript數組的每一項能夠保存任何類型的數據,數組的大小也能夠動態調整;正則表達式

(1) 建立數組express

第一種方式:Array構造函數數組

  var colors=new Array();框架

  var colors1=new Array(20);函數

  var colors2=new Array("rad","blue","green");this

  var colors3=Array(3);spa

  var colors4=Array("Greg");對象

第二種方式:數組字面量排序

  var colors=["red","blue","green"];

  var names=[];

在使用數組字面量表示法時,不會調用Array構造函數;

(2)讀取和設置數組

在讀取和設置數組值時,要使用方括號並提供相應值的基於0的數字索引;

在設置某個值的索引超過了數組現有項數,數組就會自動增長到該索引值加1的長度;

數組的length屬性不是隻讀的,經過這個屬性,能夠從數組的末尾移除項或向數組中添加新項;

  var colors=["red","blue","green"];

  colors[99]="black";

  alert(colors.length);  //100

  alert(colors[3]);  //undefined

(3)檢測數組

第一種:instanceof操做符

  if(value instanceof Array){ //對數組的某些操做}

instanceof假定單一的全局執行環境,若網頁中有多個框架,存在兩個以上不一樣的全局執行環境,存在兩個以上不一樣版本的Array構造函數;

第二種:Array.isArray()方法(ECMAScript5新增)

肯定某個值究竟是不是數組,無論它是在哪一個全局執行環境中建立的;

(4)轉換方法

toString()方法返回數組中每一個值的字符串形式拼接而成的一個以逗號分隔的字符串;

valueOf()返回的仍是數組;

toLocaleString()方法也返回一個數組值的以逗號分隔的字符串,但調用的是每一項的toLocaleString方法;

使用join方法可使用不一樣的分隔符來構建字符串,只接受一個參數,即用做分隔的字符串;

若是數組中的某一項值時null或者undefined,那麼該值在以上方法中以空字符串表示;

(5)棧方法(後進先出)

ECMAScript爲數組提供了push和pop方法,實現相似棧的行爲;

Push能夠接受任意數量的參數,把它們逐個添加到數組末尾,並返回修改後數組的長度;

Pop方法從數組末尾移除最後一項,減小數組的length值,然會返回移除的項;

(6)隊列方法(先進先出)Push和shift方法

shift方法移除數組中的第一個項並返回該項,同時數組長度減1;

unshift方法能在數組前端添加人一個項並返回新數組的長度,

(7)重排序方法

Reverse方法反轉數組項的順序;

Sort方法按照升序排列數組項,sort方法會調用每一個數組項的tostring轉型方法,而後比較獲得的字符串,以肯定如何排序,即便數組中每一項都是數值,sort方法比較的也是字符串;

  var values=[0,1,5,10,15];

  values.sort();

  alert(values);   //0,1,10,15,5

Sort方法能夠接受一個比較函數做爲參數,以便咱們制定那個值位於那個值的前面

  function compare(value1,value2)

  {

     if(value1<value2){return -1;}

     else if(value1>value2){return 1;}

     else{return 0;}

  }       

      Values.sort(compare);  //0,1,5,10,15

 對於數值型,compare函數更簡單

   function compare(value1,value2)

  {

         Return value1-value2;

  }

(8)操做方法

Concat方法:基於當前數組中的全部項穿件一個新數組,它會先建立當前數組一個副本,而後將接收到的參數添加到這個副本的末尾,最後返回新構建的數組,在沒有參數的狀況下,只是返回當前數組的副本;若是參數一或多個數組,會將數組中的每一項都添加到結果數組中;若是傳遞的值不是數組,這些值就會被簡單地添加到結果數組的末尾;

Slice方法,基於當前數組中的一或多個項建立一個新數組,一個參數時,返回從該參數指定位置開始到當前數組末尾的全部項,若是有兩個參數,該方法返回起始和結束位置之間的項(但不包括結束位置的項),slice方法不會影響原始數組;

若是slice方法的參數有一個負數,則用數組長度加上該數來肯定相應的位置,在 一個包含5項的數組上調用slice(-2,-1)與調用slice(3,4)獲得的結果相同;

Splice方法:主要 是向數組中部插入項

刪除:能夠刪除任意數量的項,只須要兩個參數:要刪除的第一項的位置和要刪除的項數,如splice(0,2)會刪除數組中的前兩項;

插入:能夠向指定位置插入任意數量的項,只須要提供3個參數:起始位置、0(要刪除的項數)和要插入的項,若是要插入多個項,能夠傳入第4、第5、以致任意多個項;

替換:能夠向指定位置插入任意數量的項,且同時刪除任意數量的項,只需指定3個參數,起始位置、要刪除的項數和要插入的任意數量的項,插入的項沒必要與刪除的項數相等;

Splice方法始終都會返回一個數組,該數組彙總包含從原始數組中刪除的項(若是沒有刪除任何項,則返回一個空數組);

(9)位置方法

Indexof和lastIndexOf方法,都接收兩個參數:要查找的項和(可選的)表示查找起點位置的索引;

Indexof方法從數組的開頭(位置0)開始向後查找,lasrIndexOf從數組的末尾開始向前查找;

(10)迭代方法

ECMAScript5爲數組定義了5個迭代方法,每一個方法都接受兩個參數:要在每一項上運行的函數和(可選的)運行該函數的做用域對象-影響this的值,傳入這些方法中的函數會接收三個參數:數組項的值,該項在數組中的位置和數組對象自己;

Every:對數組中的每一項運行給定函數,若是該函數對每一項都返回true,則返回true;

Filter:對數組中每一項運行給定的函數,返回該函數會返回true的項組成的數組;

forEach:對數組中每一項運行給定的函數,沒有 返回值;

map:對數組中每一項運行給定的函數,返回每次函數調用的結果組成的數組;

some:對數組中每一項運行給定的函數,若是該函數對任一項返回true,則返回true;

  var numbers=[1,2,3,4,5,4,3,2,1];

  var filterResult=numbers.filters.filter(function(item,index,array){

     return (item>2)

  })

  Alert(filterResult);  //[3,4,5,4,3]

(11) 縮小方法

ECMAScript5新增了兩個縮小數組的方法:reduce和reduceRight,都會迭代數組的全部項,而後構建一個最終返回的值;reduce從數組的第一項開始,逐個遍歷到最後,而reduceRight從數組的最後一項開始,向前遍歷到第一項;

這兩個方法都接收兩個參數:一個在每一項上調用的函數和(可選的)做爲縮小基礎的初始值,函數接收4個參數:前一個值、當前值、項的索引和數組對象;這個函數放回的任何值都會做爲第一個參數自動傳給下一項,第一次迭代發生在數組的第二項上,所以第一個參數是數組的第一項。第二個參數是數組的第二項;

  var values=[1,2,3,4,5];

  var sum=values.reduce(function(prev,cur,index,array){

     return prev+cur;

  });

  Alert(sum);  //15

 

二、RegExp類型

(1)字面量形式定義正則表達式

建立正則表達式:var expression=/pattern/flags;

Pattern能夠是任何簡單活複雜的正則表達式,能夠包含字符類、限定符、分組、向前查找以及反向引用;flags用以代表正則表達式的行爲主要有:

g:全局模式,模式將被應用於全部字符串,而非在發現第一個匹配項時當即中止;

i:不區分大小寫模式;

m:多行模式;

var pattern=/.at/gi;  //匹配全部以」at」結尾的3個字符的組合,不區分大小寫;

元字符都必須轉義,元字符包括:

(  [  {  \   ^  |  )  ?  *  +  .  }  ]

Var pattern2=/\[bc]at/i;   //匹配第一個」[bc]at」,不區分大小寫

(2)RegExp構造函數形式

構造函數接收兩個參數:一個是要匹配的字符串模式,另外一個是可選的標誌字符串;

Var pattern2=new RegExp(「[bc]at」,」i」);

字符串模式在某些狀況下存在雙重轉義,字面量模式:/\[bc\]at/等價的字符串是:」\\[bc\\]at

在ECMAScript3中,正則表達式字面量式中會共享同一個RegExp實例,而使用構造函數建立的每個新RegExp實例都是一個新實例;

ECMAScript5明確規定,使用正則表達式字面量必須像直接調用ECMAScript3構造函數同樣,每次都建立新的RegExp實例;

(3)RegExp實例屬性

global:布爾值,表示是否設置了g標誌

ignoreCase:布爾值,是否設置了i標誌

lastIndex:整數,開始搜索下一個匹配項的字符位置,從0算起

multiline:布爾值,是否設置m標誌

source:正則表達式字符串表示,按照字面量形式而非傳入構造函數總的字符串模式返回;

(4)RegExp實例方法

第一個方法:exec()

exec方法接受一個參數,即要應用模式的字符串,返回包含第一個匹配項信息的數組,在沒有匹配項的狀況下返回null;返回數組是Array實例,可是包含兩個額外屬性:index和input,index表示匹配項在字符串中的位置,input表示應用正則表達式的字符串,在數組中,第一項是與整個模式匹配的字符串,其餘項是與模式中的捕獲組匹配的字符串(若模式中沒有捕獲組,則該數組只包含一項);

在exec方法中,即便設置了全局標誌(g),每次也只返回一個匹配項,在不設置全局標誌的狀況下,在同一個字符串上屢次調用exec將始終返回第一個匹配項的信息;而在設置全局標誌的狀況下,每次調用都會字符串中繼續查找新匹配項;

第二個方法:test()

test方法只接受一個參數,在模式與該參數匹配的狀況下,返回true,不然返回false;

(5)RegExp構造函數屬性(這些屬性在其餘語言中被看作靜態屬性)

長屬性名:input、lastMtach、lastPerson、leftContext、multiline、rightContext

短屬性名:$_  $&  $+  $`  $*  $’

input返回原始字符串

leftContext返回匹配單詞以前的字符串

rightContext返回匹配單詞以後的字符串

lastMtach返回最近一次與整個正則表達式匹配的字符串

lastPerson返回最近一次匹配的捕獲組

相關文章
相關標籤/搜索