JavaScript讀書筆記(5)-Array RegExp

來源:互聯網
上載者:User

標籤:

1、Array類型

ECMAScript數組的每一項可以儲存任何類型的資料,數組的大小也可以動態調整;

(1) 建立數組

第一種方式:Array建構函式

  var colors=new Array();

  var colors1=new Array(20);

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

  var colors3=Array(3);

  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,那麼該值在以上方法中以Null 字元串表示;

(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(要刪除的項數)和要插入的項,如果要插入多個項,可以傳入第四、第五、以至任意多個項;

替換:可以向指定位置插入任意數量的項,且同時刪除任意數量的項,只需指定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

 

2、RegExp類型

(1)字面量形式定義Regex

建立Regex:var expression=/pattern/flags;

Pattern可以是任何簡單活複雜的Regex,可以包含字元類、限定符、分組、向前尋找以及反向引用;flags用以表明Regex的行為主要有:

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中,Regex字面量式中會共用同一個RegExp執行個體,而使用建構函式建立的每一個新RegExp執行個體都是一個新執行個體;

ECMAScript5明確規定,使用Regex字面量必須像直接調用ECMAScript3建構函式一樣,每次都建立新的RegExp執行個體;

(3)RegExp執行個體屬性

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

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

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

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

source:Regex字串表示,按照字面量形式而非傳入建構函式總的字串模式返回;

(4)RegExp執行個體方法

第一個方法:exec()

exec方法接受一個參數,即要應用模式的字串,返回包含第一個匹配項資訊的數組,在沒有匹配項的情況下返回null;返回數組是Array執行個體,但是包含兩個額外屬性:index和input,index表示匹配項在字串中的位置,input表示應用Regex的字串,在數組中,第一項是與整個模式比對的字串,其他項是與模式中的擷取的群組匹配的字串(若模式中沒有擷取的群組,則該數組只包含一項);

在exec方法中,即使設定了全域標誌(g),每次也只返回一個匹配項,在不設定全域標誌的情況下,在同一個字串上多次調用exec將始終返回第一個匹配項的資訊;而在設定全域標誌的情況下,每次調用都會字串中繼續尋找新匹配項;

第二個方法:test()

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

(5)RegExp建構函式屬性(這些屬性在其他語言中被看做靜態屬性)

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

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

input返回原始字串

leftContext返回匹配單詞之前的字串

rightContext返回匹配單詞之後的字串

lastMtach返回最近一次與整個Regex匹配的字串

lastPerson返回最近一次匹配的擷取的群組

 

JavaScript讀書筆記(5)-Array RegExp

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.