一、數組
(1)檢測數組
對於一個全域範圍來說,使用instanceof操作符可以檢測某個對象是不是數組:
代碼如下 |
複製代碼 |
if (value instanceof Array){ // } |
但如果網頁中存在多個架構,實際上就存在多個不同的全域範圍,從而存在多個不同版本的Array建構函式。如果從一個架構向另一個架構傳入一個數組,以上操作符便不起作用。ES5新增的Array.isArray()方法可以確定某個對象到底是不是數組,而不管它是在哪個全域範圍中建立的。
代碼如下 |
複製代碼 |
if (Array.isArray(value)){ // } |
以下舉個例子:
代碼如下 |
複製代碼 |
<Script Language = "JAVAScript"> <!-- var fruit; //聲明數組(變數) fruit = ["西瓜","香蕉","蘋果"]; //給數組內三種水果賦值 //第一次顯示數組“fruit”的3個變數內容,<br>是分行符號 document.write(fruit[0] + "<br>" + fruit[1] + "<br>" + fruit[2] + "<br>" + fruit); document.write("<hr>"); //插入水平線做為分隔線 fruit = [fruit[0],fruit[1],"草黴"]; //更改“fruit”數組內的變數“fruit[2]”為“草黴” //第二次顯示數組“fruit”的3個變數內容,<br>是分行符號 document.write(fruit[0] + "<br>" + fruit[1] + "<br>" + fruit[2] + "<br>" + fruit); document.write("<hr>"); //插入水平線做為分隔線 fruit = ["西瓜", ,"草黴"]; //重新給數組“fruit”內的變數賦值 //第三次顯示數組“fruit”的3個變數內容,<br>是分行符號 document.write(fruit[0] + "<br>" + fruit[1] + "<br>" + fruit[2] + "<br>" + fruit); document.write("<hr>"); //插入水平線做為分隔線 fruit = ["西瓜","香蕉", ,]; //重新給數組“fruit”內的變數賦值,使數組增長到4個變數 //第四次顯示數組“fruit”的4個變數內容,<br>是分行符號 document.write(fruit[0] + "<br>" + fruit[1] + "<br>" + fruit[2] + "<br>" + fruit[3] + "<br>" + fruit); document.write("<hr>"); //插入水平線做為分隔線 --> </Script> |
(2)轉換方法
所以對象都具有toString()、valueOf()方法。調用數組的toString()方法會返回數組中每個值的字串形式拼接而成的一個以逗號分隔的字串。
而調用valueOf()方法返回的還是數組。
使用join()方法,可以使用不同的分隔字元來構建由數群組轉換的字串。它接受一個字串參數,將其用作分隔字元。預設為逗號。如果傳入‘’,則將數組無素拼接起來,與字串的+操作運算一樣。
(3)棧、隊列方法
push():接收任意數量的參數,把它們逐個添加到數組末尾,返回修改後數組的長度。
pop():不帶參數,移除數組最後一項,並返回該項。
shift():不帶參數,移除數組第一個項,並返回該項。
unshift():接收任意數量的參數,添加到數組的前端,返回新數組的長度。
(4)重排序方法
reverse():反轉數組項的順序,並返回修改後的數組。
sort():預設按升序排列數組項,並返回排序後的數組。它會調用每個項的toString()方法,然後比較得到的字串,即使數組中每一項都是數字。
代碼如下 |
複製代碼 |
var num = [0,1,5,10,15]; num.sort(); console.log(num); // [0,1,10,15,5]
|
因為這種情況,我們一般給sort()傳一個比較函數作為參數:
代碼如下 |
複製代碼 |
function compare(value1, value2){ if (value1 < value2){ return -1; //這是升序的。可以交換-1和1,使結果降序。 } else if (value1 > value2){ return 1; } else { return 0; } }
|
如果對於數實值型別或者其他valueOf()方法會返回數實值型別的物件類型,可以使用下面更簡單的比較函數:
代碼如下 |
複製代碼 |
function compare(value1, value2){ return value1 - value2; //這是升序的。可以交換value1和value2,使結果降序。 } |
(5)操作方法
split() 方法用於把一個字串分割成字串數組。
concat():建立當前數組的一個副本,添加參數到這個副本的末尾,並返回這個新構建的數組。(即原數組不變)
slice():接受一或兩個參數,即要返回項的起始和結束位置(結束位置的項不返回)。只有一個參數時,則返回起始項到當前數組末尾的所有項。(原數組不變)
splice():主要用途是向數組的中部插入項。(返回原數組被刪除的項組成的數組,或一個空數組)如3種情況:
1.刪除:2個參數,要刪除的第一項的位置和要刪除的項數。splice(0,2)刪除數組中的前兩項。
2.插入:3個(或以上)參數,起始位置、0(要刪除的項數)、要插入的任意項。splice(2,0,'insert')從前數組的位置2插入項'insert'(注意'insert'是第
2項而不是第3項)。
3.替換:3個(或以上)參數,起始位置、要刪除的項數、要插入的任意項。splice(2,1,'red','green')刪除位元置2的項,從位置2插入指定項。
(6)位置方法
indexOf():兩個參數,要尋找的項和(可選的)表示尋找起點的位置的索引。從左向右尋找。
lastIndesOf():同上,不同的是從右向左尋找。
這兩個方法都返回要尋找的項在數組中的位置,找不到則返回-1。
代碼如下 |
複製代碼 |
var num = [1,2,3,4,5,4,3,2,1]; alert(num.indexOf(4)); //3 alert(num.lastIndexOf(4)); //5 alert(num.indexOf(4,4)); //5 alert(num.lastIndesOf(4,4)); //3
|
(7)迭代方法
ES5為數組定義了5個迭代方法。每個方法都接受兩個參數:要在每一項上啟動並執行函數和(可選的)運行該函數的範圍——影響this值。
而傳入這些方法中的函數接收3個參數:數組項的值、該項在數組中的下標、數組對象本身。
every():對數組中的每一項運行給定函數,如果每一項都返回true,則返回true。
some():對數組中的每一項運行給定函數,只要有任一項返回true,則返回true。
filter():對數組中的每一項運行給定函數,返回該函數會返回true的項組成的數組。
forEach():對數組中的每一項運行給定函數,沒有傳回值。
map():對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組。
(8)歸併方法
ES5新增兩個歸併數組的方法:reduce()、reduceRight()。這兩個方法會迭代數組的所有項,然後構建一個最終返回的值。
reduce()方法從數組的第一項開始,reduceRight()相反。
它們都接收兩個參數:在每一項上調用的函數、(可選的)作為歸併基礎的初始值。
傳入的函數接收4個參數:前一個值、當前值、項的索引、數組對象。
代碼如下 |
複製代碼 |
var num = [1,2,3,4,5]; var sum = num.reduce(function(prev,cur,index,array){ //這個函數的傳回值會作為第一個參數自動傳給下一項。在這裡,第一次迭代:prev是1,cur是2。 //第二次迭代,prev是3(1+2的結果),cur是3. return prev + cur; }); alert(sum); //15
|
二、字串
(1)字元方法
charAt():接收一個表示字元位置的參數。var str = 'hello'; alert(str.charAt(1)); // 'e'
charCodeAt():參數同上。得到的不是字元而是字元編碼。var str = 'hello'; alert(str.charCodeAt(1)); // '101'
也可以使用方括弧加索引來訪問:var str = 'hello'; alert(str[1]); //'e'
(2)字串操作方法(以下方法不會影響原字串)
concat():同數組的類似。實踐中更多的是用+。
slice():2個參數表示子字串的開始位置、結束位置(不包括在子字串中)。
substring():同上。
substr():第一個參數同上,第二個參數表示返回的字元個數。
以上如果沒有第2個參數,則將字串的長度作為結束位置。
(3)字串位置方法
indexOf():參考上面數組的。
lastIndesOf():參考上面數組的。
(4)trim()方法:建立一個字串的副本,刪除前置及尾碼的所有空格,返回結果。
(5)大小寫轉換
toLowerCase()、toLocaleLowerCase()、toUpperCase()、toLocaleUpperCase()。
(6)模式比對方法(待補充)
match()
search()
replace()
split()
(7)localeCompare()方法
這個方法比較兩個字串,返回以下值:
如果字串在字母表中應該排在字串參數之前,返回負數(-1),在其之後,則返回正數(1),相等則返回0。(不同地區,方法的行為不同。如國家不同。)
代碼如下 |
複製代碼 |
var str = 'yellow'; str.localeCompare('brick'); //1 str.localeCompare('yellow'); //0 str.localeCompare('zoo'); //-1
|
(8)fromCharCode()
這是String建構函式的一個靜態方法。接收一或多個字串編碼,然後將它們轉換成一個字串。與charCodeAt()執行的是相反的操作。
代碼如下 |
複製代碼 |
String.fromCharCode(104); //'h' |