每個Ajax 架構都對Javascript 做了擴充,提供了很多常用函數,增強了 Javascript 的開發效率。在這裡將對部分Dojo 中的常用函數做簡單的介紹。由於Dojo的常用函數較多,也為方便大家閱讀,將這些常用函數分為了五個類別分別進行介紹。本文將介紹第四部分的內容:String及Array擴充。
* 本系列博文的絕大多數內容來自於對dojocampus.org上的dojo reference guide文檔的翻譯,在此也特別感謝文檔的翻譯者們:Fei Jia, Zhu Xiao Wen, Li Wen Bing, Zhang Jun, Hu Kuang, Huang Wei, Wu Min Qi, Mo Ying, Cheng Fu, Zhong Si Qi
dojo.forEach, dojo.some, dojo.every, dojo.map
dojo.forEach的作用及用法類似於標準的array的forEach方法(參見JavaScript 1.6 forEach()
),用於迴圈數組中的所有元素,該方法相容所有的主流瀏覽器。一般的迴圈寫法為:
for(var i=0; i<queueEntries.length; i++){<br /> console.debug(queueEntries[i], "at index", i);<br />}
類似的迴圈可以用dojo.forEach替代:
dojo.forEach(queueEntries, function(entry, i){<br /> console.debug(entry, "at index", i);<br />});
可是,forEach並不能根據提供的條件中斷迴圈的執行,如果想要使迴圈在一定條件下終止,則應該使用dojo.some()或dojo.every()方法,它們都會返回一個boolean變數,dojo.some用於判斷是否數組中有任何滿足給定條件的元素,如果迴圈到任一滿足條件的元素則跳出迴圈並返回true;而dojo.every則用於判斷是否所有的元素都滿足給定的條件,如果迴圈到任一不滿足條件的元素則跳出迴圈並返回false。下面是這兩個方法的樣本:
var arr = [200000, 500000, 350000, 1000000, 75, 3];<br />if (dojo.some(arr, function(item) {<br /> return item >= 1000000<br />})) {<br /> result = 'yes, there are';<br />} else {<br /> result = 'no, there aren no such items';<br />}<br />if(dojo.every(arr, function(item){<br /> return item >= 1000000<br />})) {<br /> result = “yes, all they are”;<br />} else {<br /> result = ”no, not all”;<br />}
dojo.forEach, dojo.some, dojo.every都接收第三個參數用以指定回呼函數的範圍。
dojo.map可以用於對給定的數組中的每個元素調用指定的回呼函數,並返回處理後的一個新數組,具體用法參看下面的樣本:
var arrValues = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]<br />var doubleValue = dojo.map(arrValues, function(item) {<br /> return item * 2;<br />});<br />Console.log(doubleValue); // output: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
dojo.indexOf
顧名思義,dojo.indexOf用於返回給定元素在指定數組中的索引號(index),由於數組索引是由0開始的,如果該數組存在給定元素,會返回一個大於等於0的正整數,否則返回-1,參見下面的樣本:
var arr = [ 1, 2, 3, 4, 5 ];<br />var idx = dojo.indexOf(arr, 1); // returns 0<br />var idx2 = dojo.indexOf(arr, 6) // returns -1
dojo.filter
返回滿足給定數組中回呼函數中規定條件的元素組成的新數組,用法參看下面的樣本:
var arr = [ 1, 2, 3, 4, 5 ];<br />var newArr = dojo.filter(attr, function(item){<br /> return item > 3;<br />});<br />console.log(newArr); // ouput: [4, 5]
dojo.trim
dojo.trim用於移除給定字串參數的前後空格,只接收一個參數,要進行處理的字串:
function show(str){<br /> return "|" + dojo.trim(str) + "|";<br />}<br />var output1 = show(" one");// |one|<br />var output2 = show("two ");// |two|<br />var output3 = show(" three ");// |three|<br />var output4 = show("/tfour/r/n");// |four|<br />var output5 = show("/f/n/r/t/vF I V E/f/n/r/t/v");// |F I V E|
dojo.replace
dojo.replace是一個輕量級的字串替換、串連的工具函數,需要注意的是該方法並不能很好的支援本地化。
該函數可接受3個參數:要進行替換部分內容的字串模板,提供替換內容的JSON對象,以及一個選擇性參數,是Regex模板用於規定什麼樣的內容將會被替換,預設情況下,該模板為一個類似於{abc}的字串。具體用法參看下面的樣本:
var output = dojo.replace(<br /> "Hello, {name.first} {name.last} AKA {nick}!",<br /> {<br /> name: {<br /> first: "Robert",<br /> middle: "X",<br /> last: "Cringely"<br /> },<br /> nick: "Bob"<br /> }<br />);
以上就是String及Array對象的一些擴充函數,在下一部分中,會介紹關於Dojo對於事件處理及Ajax I/O的一些擴充函數。