1.前言
因為公司最近專案比較忙,沒那麼多空餘的事件寫文章了,所以這篇文章晚了幾天釋出。但是這也沒什麼關係,不過該來的,總是會來的。
好了,其他的不多說的,大家在開發的時候應該知道,有很多常見的例項操作。比如陣列去重,關鍵詞高亮,打亂陣列等。這些操作,程式碼一般不會很多,實現的邏輯也不會很難,下面的程式碼,我解釋就不解釋太多了,打上註釋,相信大家就會懂了。但是,用的地方會比較,如果專案有哪個地方需要用,如果重複寫的話,就是程式碼冗餘,開發效率也不高,複用基本就是複製貼上!這樣是一個很不好的習慣,大家可以考慮一下把一些常見的操作封裝成函式,呼叫的時候,直接呼叫就好!
原始碼都放在github上了,大家想以後以後有什麼修改或者增加的,歡迎大家來star一下ec-do。
2.字串操作
2-1去除字串空格
1 2 3 4 5 6 7 8 9 10 |
//去除空格 type 1-所有空格 2-前後空格 3-前空格 4-後空格 function trim(str,type){ switch (type){ case 1:return str.replace(/\s+/g,""); case 2:return str.replace(/(^\s*)|(\s*$)/g, ""); case 3:return str.replace(/(^\s*)/g, ""); case 4:return str.replace(/(\s*$)/g, ""); default:return str; } } |
2-2字母大小寫切換
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
/*type 1:首字母大寫 2:首頁母小寫 3:大小寫轉換 4:全部大寫 5:全部小寫 * */ //changeCase('asdasd',1) //Asdasd function changeCase(str,type) { function ToggleCase(str) { var itemText = "" str.split("").forEach( function (item) { if (/^([a-z]+)/.test(item)) { itemText += item.toUpperCase(); } else if (/^([A-Z]+)/.test(item)) { itemText += item.toLowerCase(); } else{ itemText += item; } }); return itemText; } switch (type) { case 1: return str.replace(/^(\w)(\w+)/, function (v, v1, v2) { return v1.toUpperCase() + v2.toLowerCase(); }); case 2: return str.replace(/^(\w)(\w+)/, function (v, v1, v2) { return v1.toLowerCase() + v2.toUpperCase(); }); case 3: return ToggleCase(str); case 4: return str.toUpperCase(); case 5: return str.toLowerCase(); default: return str; } } |
2-3字串迴圈複製
1 2 3 4 5 6 7 8 9 10 |
//repeatStr(str->字串, count->次數) //repeatStr('123',3) //"123123123" function repeatStr(str, count) { var text = ''; for (var i = 0; i < count; i++) { text += str; } return text; } |
2-4字串替換
1 2 3 4 5 |
//字串替換(字串,要替換的字元,替換成什麼) function replaceAll(str,AFindText,ARepText){ raRegExp = new RegExp(AFindText,"g"); return str.replace(raRegExp,ARepText); } |
2-5替換*
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
//replaceStr(字串,字元格式, 替換方式,替換的字元(預設*)) function replaceStr(str, regArr, type,ARepText) { var regtext = '', Reg = null,replaceText=ARepText||'*'; //replaceStr('18819322663',[3,5,3],0) //188*****663 //repeatStr是在上面定義過的(字串迴圈複製),大家注意哦 if (regArr.length === 3 && type === 0) { regtext = '(\\w{' + regArr[0] + '})\\w{' + regArr[1] + '}(\\w{' + regArr[2] + '})' Reg = new RegExp(regtext); var replaceCount = repeatStr(replaceText, regArr[1]); return str.replace(Reg, '$1' + replaceCount + '$2') } //replaceStr('asdasdasdaa',[3,5,3],1) //***asdas*** else if (regArr.length === 3 && type === 1) { regtext = '\\w{' + regArr[0] + '}(\\w{' + regArr[1] + '})\\w{' + regArr[2] + '}' Reg = new RegExp(regtext); var replaceCount1 = repeatSte(replaceText, regArr[0]); var replaceCount2 = repeatSte(replaceText, regArr[2]); return str.replace(Reg, replaceCount1 + '$1' + replaceCount2) } //replaceStr('1asd88465asdwqe3',[5],0) //*****8465asdwqe3 else if (regArr.length === 1 && type == 0) { regtext = '(^\\w{' + regArr[0] + '})' Reg = new RegExp(regtext); var replaceCount = repeatSte(replaceText, regArr[0]); return str.replace(Reg, replaceCount) } //replaceStr('1asd88465asdwqe3',[5],1,'+') //"1asd88465as+++++" else if (regArr.length === 1 && type == 1) { regtext = '(\\w{' + regArr[0] + '}$)' Reg = new RegExp(regtext); var replaceCount = repeatSte(replaceText, regArr[0]); return str.replace(Reg, replaceCount) } } |
2-6檢測字串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
//checkType('165226226326','phone') //false //大家可以根據需要擴充套件 function checkType (str, type) { switch (type) { case 'email': return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str); case 'phone': return /^1[3|4|5|7|8][0-9]{9}$/.test(str); case 'tel': return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str); case 'number': return /^[0-9]$/.test(str); case 'english': return /^[a-zA-Z]+$/.test(str); case 'chinese': return /^[\u4E00-\u9FA5]+$/.test(str); case 'lower': return /^[a-z]+$/.test(str); case 'upper': return /^[A-Z]+$/.test(str); default : return true; } } |
2-7檢測密碼強度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//checkPwd('12asdASAD') //3(強度等級為3) function checkPwd(str) { var nowLv = 0; if (str.length < 6) { return nowLv } if (/[0-9]/.test(str)) { nowLv++ } if (/[a-z]/.test(str)) { nowLv++ } if (/[A-Z]/.test(str)) { nowLv++ } if (/[\.|-|_]/.test(str)) { nowLv++ } return nowLv; } |
2-8隨機碼(toString詳解)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//count取值範圍0-36 //randomNumber(10) //"2584316588472575" //randomNumber(14) //"9b405070dd00122640c192caab84537" //Math.random().toString(36).substring(2); //"83vhdx10rmjkyb9" function randomNumber(count){ return Math.random().toString(count).substring(2); } |
2-9查詢字串
可能標題會有點誤導,下面我就簡單說明一個需求,在字串'sad44654blog5a1sd67as9dablog4s5d16zxc4sdweasjkblogwqepaskdkblogahseiuadbhjcibloguyeajzxkcabloguyiwezxc967'
中找出’blog’的出現次數。程式碼如下
1 2 3 4 5 6 |
function countStr (str,strSplit){ return str.split(strSplit).length-1 } var strTest='sad44654blog5a1sd67as9dablog4s5d16zxc4sdweasjkblogwqepaskdkblogahseiuadbhjcibloguyeajzxkcabloguyiwezxc967' //countStr(strTest,'blog') //6 |
3.陣列操作
3-1陣列去重
這個方法是在太多了,我之前寫的文章(js陣列操作–使用迭代方法替代for迴圈,js關鍵詞變色,陣列打亂,陣列去重的實現和封裝)也有提到,我今天這裡就寫一種之前沒用過的方法。
1 2 3 4 5 6 7 8 9 10 |
//ES6新增的Set資料結構,類似於陣列,但是裡面的元素都是唯一的 ,其建構函式可以接受一個陣列作為引數 //let arr=[1,2,1,2,6,3,5,69,66,7,2,1,4,3,6,8,9663,8] //let set = new Set(array); //{1,2,6,3,5,69,66,7,4,8,9663} //ES6中Array新增了一個靜態方法from,可以把類似陣列的物件轉換為陣列 //Array.from(set) //[1,2,6,3,5,69,66,7,4,8,9663] function removeRepeatArray(arr){ return Array.from(new Set(arr)) } |
3-2陣列順序打亂
1 2 3 |
function upsetArr(arr){ return arr.sort(function(){ return Math.random() - 0.5}); } |
3-3陣列最大值最小值
1 2 3 4 5 6 7 |
//這一塊的封裝,主要是針對數字型別的陣列 function maxArr(arr){ return Math.max.apply(null,arr); } function minArr(arr){ return Math.min.apply(null,arr); } |
3-4陣列求和,平均值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//這一塊的封裝,主要是針對數字型別的陣列 //求和 function sumArr(arr){ var sumText=0; for(var i=0,len=arr.length;i<len;i++){ sumText+=arr[i]; } return sumText } //平均值,小數點可能會有很多位,這裡不做處理,處理了使用就不靈活了! function covArr(arr){ var sumText=sumArr(arr); var covText=sumText/length; return covText } |
3-5從陣列中隨機獲取元素
1 2 3 4 5 6 7 8 9 10 11 |
//randomOne([1,2,3,6,8,5,4,2,6]) //2 //randomOne([1,2,3,6,8,5,4,2,6]) //8 //randomOne([1,2,3,6,8,5,4,2,6]) //8 //randomOne([1,2,3,6,8,5,4,2,6]) //1 function randomOne(arr) { return arr[Math.floor(Math.random() * arr.length)]; } |
3-6返回陣列(字串)一個元素出現的次數
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//getEleCount('asd56+asdasdwqe','a') //3 //getEleCount([1,2,3,4,5,66,77,22,55,22],22) //2 function getEleCount (obj, ele) { var num = 0; for (var i = 0, len = obj.length; i < len; i++) { if (ele == obj[i]) { num++; } } return num; } |
3-7返回陣列(字串)出現最多的幾次元素和出現次數
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
//arr, rank->長度,預設為陣列長度,ranktype,排序方式,預設降序 function getCount(arr, rank,ranktype){ var obj = {}, k, arr1 = [] //記錄每一元素出現的次數 for (var i = 0, len = arr.length; i < len; i++) { k = arr[i]; if (obj[k]) { obj[k]++; } else { obj[k] = 1; } } //儲存結果{el-'元素',count-出現次數} for (var o in obj) { arr1.push({el: o, count: obj[o]}); } //排序(降序) arr1.sort(function (n1, n2) { return n2.count - n1.count }); //如果ranktype為1,則為升序,反轉陣列 if(ranktype===1){ arr1=arr1.reverse(); } var rank1 = rank || arr1.length; return arr1.slice(0,rank1); } |
getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2])
預設情況,返回所有元素出現的次數
getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],3)
傳參(rank=3),只返回出現次數排序前三的
getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],null,1)
傳參(ranktype=1,rank=null),升序返回所有元素出現次數
getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],3,1)
傳參(rank=3,ranktype=1),只返回出現次數排序(升序)前三的
3-8得到n1-n2下標的陣列
1 2 3 4 5 6 7 8 |
//getArrayNum([0,1,2,3,4,5,6,7,8,9],5,9) //[5, 6, 7, 8, 9] //getArrayNum([0,1,2,3,4,5,6,7,8,9],2) 不傳第二個引數,預設返回從n1到陣列結束的元素 //[2, 3, 4, 5, 6, 7, 8, 9] function getArrayNum(arr,n1,n2){ var arr1=[],len=n2||arr.length-1; for(var i=n1;i |
3-9篩選陣列
1 2 3 4 5 6 7 8 9 |
/刪除值為'val'的陣列元素 //removeArrayForValue(['test','test1','test2','test','aaa'],'test','%') //["aaa"] 帶有'test'的都刪除 //removeArrayForValue(['test','test1','test2','test','aaa'],'test') //["test1", "test2", "aaa"] //陣列元素的值全等於'test'才被刪除 function removeArrayForValue(arr,val,type){ arr.filter(function(item){return type==='%'?item.indexOf(val)!==-1:item!==val}) } |
4.基礎DOM操作
這個部分程式碼其實參考jquery的一些函式寫法,唯一區別就是呼叫不用,引數一樣.
比如下面的栗子
1 2 3 4 5 6 |
//設定物件內容 jquery:$('#xxx').html('hello world'); 現在:html(document.getElementById('xxx'),'hello world') //獲取物件內容 jquery:$('#xxx').html(); 現在:html(document.getElementById('xxx')) |
4-1檢測物件是否有哪個類名
1 2 3 4 |
function hasClass(obj,classStr){ var arr=obj.className.split(/\s+/); //這個正規表示式是因為class可以有多個,判斷是否包含 return (arr.indexOf(classStr)==-1)?false:true; }, |
4-2新增類名
1 2 3 |
function addClass(obj,classStr){ if (!this.hasClass(obj,classStr)){obj.className += " " + classStr}; }, |
4-3刪除類名
1 2 3 4 5 6 |
function removeClass(obj,classStr){ if (this.hasClass(obj,classStr)) { var reg = new RegExp('(\\s|^)' + classStr + '(\\s|$)'); obj.className = obj.className.replace(reg, ''); } }, |
4-4替換類名(“被替換的類名”,”替換的類名”)
1 2 3 4 |
function replaceClass(obj,newName,oldName) { removeClass(obj,oldName); addClass(obj,newName); } |
4-5獲取兄弟節點
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
function siblings(obj){ var a=[];//定義一個陣列,用來存o的兄弟元素 var p=obj.previousSibling; while(p){//先取o的哥哥們 判斷有沒有上一個哥哥元素,如果有則往下執行 p表示previousSibling if(p.nodeType===1){ a.push(p); } p=p.previousSibling//最後把上一個節點賦給p } a.reverse()//把順序反轉一下 這樣元素的順序就是按先後的了 var n=obj.nextSibling;//再取o的弟弟 while(n){//判斷有沒有下一個弟弟結點 n是nextSibling的意思 if(n.nodeType===1){ a.push(n); } n=n.nextSibling; } return a; }, |
4-6設定樣式
1 2 3 4 5 |
function css(obj,json){ for(var attr in json){ obj.style[attr]=json[attr]; } } |
4-7設定文字內容
1 2 3 4 5 6 7 8 |
function html(obj){ if(arguments.length==0){ return this.innerHTML; } else if(arguments.length==1){ this.innerHTML=arguments[0]; } } |
4-8顯示隱藏
1 2 3 4 5 6 |
function show(obj){ obj.style.display=""; } function hide(obj){ obj.style.display="none"; } |
5.其他操作
5-1cookie
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//cookie //設定cookie function setCookie(name,value,iDay){ var oDate=new Date(); oDate.setDate(oDate.getDate()+iDay); document.cookie=name+'='+value+';expires='+oDate; } //獲取cookie function getCookie(name){ var arr=document.cookie.split('; '); for(var i=0;i<arr.length;i++){ var arr2=arr[i].split('='); if(arr2[0]==name) { return arr2[1]; } } return ''; } //刪除cookie function removeCookie(name){ setCookie(name,1,-1); } |
5-2清除物件中值為空的屬性
1 2 3 4 5 6 7 8 9 10 11 |
//filterParams({a:"",b:null,c:"010",d:123}) //Object {c: "010", d: 123} function filterParams(obj){ let _newPar = {}; for (let key in obj) { if ((obj[key] === 0 || obj[key]) && obj[key].toString().replace(/(^\s*)|(\s*$)/g, '') !== '') { _newPar[key] = obj[key]; } } return _newPar; } |
5-3現金額大寫轉換函式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//upDigit(168752632) //"人民幣壹億陸仟捌佰柒拾伍萬貳仟陸佰叄拾貳元整" //upDigit(1682) //"人民幣壹仟陸佰捌拾貳元整" //upDigit(-1693) //"欠人民幣壹仟陸佰玖拾叄元整" function upDigit(n) { var fraction = ['角', '分','釐']; var digit = ['零', '壹', '貳', '叄', '肆', '伍', '陸', '柒', '捌', '玖']; var unit = [ ['元', '萬', '億'], ['', '拾', '佰', '仟'] ]; var head = n 0; i++) { var p = ''; for (var j = 0; j 0; j++) { p = digit[n % 10] + unit[1][j] + p; n = Math.floor(n / 10); } //s = p.replace(/(零.)*零$/, '').replace(/^$/, '零')+ unit[0][i] + s; s = p+ unit[0][i] + s; } return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整'); } |
5-4獲取,設定url引數
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
//獲取url引數 //getUrlPrmt('segmentfault.com/write?draftId=122000011938') //Object{draftId: "122000011938"} function getUrlPrmt(url) { url = url ? url : window.location.href; let _pa = url.substring(url.indexOf('?') + 1), _arrS = _pa.split('&'), _rs = {}; for (let i = 0, _len = _arrS.length; i < _len; i++) { let pos = _arrS[i].indexOf('='); if (pos == -1) { continue; } let name = _arrS[i].substring(0, pos), value = window.decodeURIComponent(_arrS[i].substring(pos + 1)); _rs[name] = value; } return _rs; } //設定url引數 //setUrlPrmt({'a':1,'b':2}) //a=1&b=2 function setUrlPrmt(obj) { let _rs = []; for (let p in obj) { if (obj[p] != null && obj[p] != '') { _rs.push(p + '=' + obj[p]) } } return _rs.join('&'); } |
5-5隨機返回一個範圍的數字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
function randomNumber(n1,n2){ //randomNumber(5,10) //返回5-10的隨機整數,包括5,10 if(arguments.length===2){ return Math.round(n1+Math.random()*(n2-n1)); } //randomNumber(10) //返回0-10的隨機整數,包括0,10 else if(arguments.length===1){ return Math.round(Math.random()*n1) } //randomNumber() //返回0-255的隨機整數,包括0,255 else{ return Math.round(Math.random()*255) } } |
5-6隨進產生顏色
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function randomColor(){ //randomNumber是上面定義的函式 //寫法1 return 'rgb(' + randomNumber(255) + ',' + randomNumber(255) + ',' + randomNumber(255) + ')'; //寫法2 return '#'+Math.random().toString(16).substring(2).substr(0,6); //寫法3 var color='#'; for(var i=0;i<6;i++){ color+='0123456789abcdef'[randomNumber(15)]; } return color; } |
//這種寫法,偶爾會有問題。大家得注意哦
//Math.floor(Math.random()*0xffffff).toString(16);
5-7Date日期時間部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//到某一個時間的倒數計時 //getEndTime('2017/7/22 16:0:0') //"剩餘時間6天 2小時 28 分鐘20 秒" function getEndTime(endTime){ var startDate=new Date(); //開始時間,當前時間 var endDate=new Date(endTime); //結束時間,需傳入時間引數 var t=endDate.getTime()-startDate.getTime(); //時間差的毫秒數 var d=0,h=0,m=0,s=0; if(t>=0){ d=Math.floor(t/1000/3600/24); h=Math.floor(t/1000/60/60%24); m=Math.floor(t/1000/60%60); s=Math.floor(t/1000%60); } return "剩餘時間"+d+"天 "+h+"小時 "+m+" 分鐘"+s+" 秒"; } |
5-8適配rem
這個適配的方法很多,我就寫我自己用的方法。大家也可以去我回答過得一個問題那裡看更詳細的說明!移動端適配問題
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
function getFontSize(){ var doc=document,win=window; var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recalc = function () { var clientWidth = docEl.clientWidth; if (!clientWidth) return; //如果螢幕大於750(750是根據我效果圖設定的,具體數值參考效果圖),就設定clientWidth=750,防止font-size會超過100px if(clientWidth>750){clientWidth=750} //設定根元素font-size大小 docEl.style.fontSize = 100 * (clientWidth / 750) + 'px'; }; //螢幕大小改變,或者橫豎屏切換時,觸發函式 win.addEventListener(resizeEvt, recalc, false); //文件載入完成時,觸發函式 doc.addEventListener('DOMContentLoaded', recalc, false); } //使用方式很簡單,比如效果圖上,有張圖片。寬高都是100px; //樣式寫法就是 img{ width:1rem; height:1rem; } //這樣的設定,比如在螢幕寬度大於等於750px裝置上,1rem=100px;圖片顯示就是寬高都是100px //比如在iphone6(螢幕寬度:375)上,375/750*100=50px;就是1rem=50px;圖片顯示就是寬高都是50px; |
6.封裝成形
寫了這麼多的操作,小夥伴應該發現了一問題,全域性函式太多了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
//這樣的話,封裝了幾個操作,就增加了幾個全域性函式,汙染了全域性變數,在開發中應該儘量避免全域性變數。不說別的,如果一個專案,幾個人開發,很有可能會造成命名的衝突。 function setUrlPrmt(obj){..} function getUrlPrmt(url){..} function upsetArr(obj){..} //所以,建議的封裝姿勢是 var myJS={ setUrlPrmt:function(obj){..}, getUrlPrmt:function(url){..}, upsetArr:function(arr){..}, } 這樣就算別人也寫這樣的函式,也不會造成衝突。全域性變數也只有一個,加上別人也不會很多! var otherJS={ setUrlPrmt:function(obj){..}, getUrlPrmt:function(url){..}, upsetArr:function(arr){..}, } //最後,封裝的效果是 var myJS={ //去除字串空格 trim:function(obj){..}, //字母大小寫切換 changeCase:function(obj){..}, //字串迴圈複製 repeatStr:function(str){..}, ..... } //如果是es6的模組化開發,大家也可以 let myJS={ //去除字串空格 trim:function(obj){..}, //字母大小寫切換 changeCase:function(obj){..}, //字串迴圈複製 repeatStr:function(str){..}, ..... } //暴露模組,裡面的方式大家也可以用es6方式實現,程式碼至少會少一點! export {myJS} |
可能有小夥伴會有疑問,這樣封裝,呼叫有點麻煩,為什麼不直接在原型上面封裝,呼叫方便。比如下面的栗子!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
String.prototype.trim=function(type){ switch (type){ case 1:return this.replace(/\s+/g,""); case 2:return this.replace(/(^\s*)|(\s*$)/g, ""); case 3:return this.replace(/(^\s*)/g, ""); case 4:return this.replace(/(\s*$)/g, ""); default:return this; } } //' 12345 6 8 96 '.trim(1) //"123456896" //比這樣trim(' 12345 6 8 96 ',1)呼叫方便。 //但是,這樣是不推薦的做法,這樣就汙染了原生物件String,別人建立的String也會被汙染,造成不必要的開銷。 //更可怕的是,萬一自己命名的跟原生的方法重名了,就被覆蓋原來的方法了 //String.prototype.substr=function(){console.log('asdasd')} //'asdasdwe46546'.substr() //asdasd //substr方法有什麼作用,大家應該知道,不知道的可以去w3c看下 |
所以在原生物件原型的修改很不推薦!至少很多的公司禁止這樣操作!
7.小結
這篇文章,寫了很久了,幾個小時了,因為我寫這篇文章,我也是重新改我以前程式碼的,因為我以前寫的程式碼,功能一樣,程式碼比較多,現在是邊想邊改邊寫,還要自己測試(之前的程式碼for迴圈很多,現在有很多簡潔的寫法代替)。加上最近公司比較忙,所以這一篇文章也是花了幾天才整理完成。
原始碼都放在github上了,大家想以後以後有什麼修改或者增加的,歡迎大家來star一下ec-do。
我自己封裝這個,並不是我有造輪子的習慣,而是:
1,都是一些常用,但是零散的小例項,網上基本沒有外掛。
2,因為零散的小例項,涉及到的有字串,陣列,物件等型別,就算找到外掛,在專案引入的很有可能不止一個外掛。
3.都是簡單的程式碼,封裝也不難。維護也簡單。
廢話就不多說了,上面的只是我自己在開發中常用到,希望能幫到小夥伴們,最理想就是這篇文章能起到一個拋磚引玉
的作用,就是說,如果覺得還有什麼操作是常用的,或者覺得我哪裡寫得不好的,也歡迎指出,讓大家相互幫助,相互學習。