編寫本身的代碼庫(javascript經常使用實例的實現與封裝)

1.前言

由於公司最近項目比較忙,沒那麼多空餘的事件寫文章了,因此這篇文章晚了幾天發佈。可是這也沒什麼關係,不過該來的,老是會來的。
好了,其餘的很少說的,你們在開發的時候應該知道,有不少常見的實例操做。好比數組去重,關鍵詞高亮,打亂數組等。這些操做,代碼通常不會不少,實現的邏輯也不會很難,下面的代碼,我解釋就不解釋太多了,打上註釋,相信你們就會懂了。可是,用的地方會比較,若是項目有哪一個地方須要用,若是重複寫的話,就是代碼沉餘,開發效率也不用,複用基本就是複製粘貼!這樣是一個很很差的習慣,你們能夠考慮一下把一些常見的操做封裝成函數,調用的時候,直接調用就好!
源碼都放在github上了,你們想之後之後有什麼修改或者增長的,歡迎你們來star一下ec-docss

2.字符串操做

2-1去除字符串空格

//去除空格  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字母大小寫切換

/*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字符串循環複製

//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字符串替換

//字符串替換(字符串,要替換的字符,替換成什麼)
function replaceAll(str,AFindText,ARepText){
   raRegExp = new RegExp(AFindText,"g");
   return str.replace(raRegExp,ARepText);
}

2-5替換*

//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檢測字符串

//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檢測密碼強度

//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詳解

//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'的出現次數。代碼以下html

function countStr (str,strSplit){
    return str.split(strSplit).length-1
}
var strTest='sad44654blog5a1sd67as9dablog4s5d16zxc4sdweasjkblogwqepaskdkblogahseiuadbhjcibloguyeajzxkcabloguyiwezxc967'
//countStr(strTest,'blog')
//6

3.數組操做

3-1數組去重

這個方法是在太多了,我以前寫的文章(js數組操做--使用迭代方法替代for循環,js關鍵詞變色,數組打亂,數組去重的實現和封裝)也有提到,我今天這裏就寫一種以前沒用過的方法。node

//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數組順序打亂

function upsetArr(arr){
    return arr.sort(function(){ return Math.random() - 0.5});
}

3-3數組最大值最小值

//這一塊的封裝,主要是針對數字類型的數組
function maxArr(arr){
    return Math.max.apply(null,arr);
}
function minArr(arr){
    return Math.min.apply(null,arr);
}

3-4數組求和,平均值

//這一塊的封裝,主要是針對數字類型的數組
//求和
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/arr.length;
    return covText
}

3-5從數組中隨機獲取元素

//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返回數組(字符串)一個元素出現的次數

//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返回數組(字符串)出現最多的幾回元素和出現次數

//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])
默認狀況,返回全部元素出現的次數
clipboard.pngjquery

getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],3)
傳參(rank=3),只返回出現次數排序前三的
clipboard.pnggit

getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],null,1)
傳參(ranktype=1,rank=null),升序返回全部元素出現次數
clipboard.pnges6

getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],3,1)
傳參(rank=3,ranktype=1),只返回出現次數排序(升序)前三的
clipboard.pnggithub

3-8獲得n1-n2下標的數組

//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<=len;i++){
        arr1.push(arr[i])
    }
    return arr1;
}

3-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){
    return arr.filter(function (item) {
        return type? item.indexOf(val) === -1 : item !== val
    })
}

4.基礎DOM操做

這個部分代碼其實參考jquery的一些函數寫法,惟一區別就是調用不用,參數同樣.
好比下面的栗子正則表達式

//設置對象內容
jquery:$('#xxx').html('hello world');
如今:html(document.getElementById('xxx'),'hello world')
//獲取對象內容
jquery:$('#xxx').html();
如今:html(document.getElementById('xxx'))

4-1檢測對象是否有哪一個類名

function hasClass(obj,classStr){ 
    var arr=obj.className.split(/\s+/); //這個正則表達式是由於class能夠有多個,判斷是否包含 
    return (arr.indexOf(classStr)==-1)?false:true;
},

4-2添加類名

function addClass(obj,classStr){
    if (!this.hasClass(obj,classStr)){obj.className += " " + classStr};
},

4-3刪除類名

function removeClass(obj,classStr){
    if (this.hasClass(obj,classStr)) {
        var reg = new RegExp('(\\s|^)' + classStr + '(\\s|$)');
        obj.className = obj.className.replace(reg, '');
    }
},

4-4替換類名("被替換的類名","替換的類名")

function replaceClass(obj,newName,oldName) {
    removeClass(obj,oldName);
    addClass(obj,newName);
}

4-5獲取兄弟節點

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設置樣式

function css(obj,json){
    for(var attr in json){
        obj.style[attr]=json[attr];
    }
}

4-7設置文本內容

function html(obj){
    if(arguments.length==0){
        return this.innerHTML;
    }
    else if(arguments.length==1){
        this.innerHTML=arguments[0];
    }
}

4-8顯示隱藏

function show(obj){
    obj.style.display="";
}
function hide(obj){
    obj.style.display="none";
}

5.其餘操做

5-1cookie

//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清除對象中值爲空的屬性

//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現金額大寫轉換函數

//upDigit(168752632)
//"人民幣壹億陸仟捌佰柒拾伍萬貳仟陸佰叄拾貳元整"
//upDigit(1682)
//"人民幣壹仟陸佰捌拾貳元整"
//upDigit(-1693)
//"欠人民幣壹仟陸佰玖拾叄元整"
function upDigit(n)   
{  
    var fraction = ['角', '分','釐'];  
    var digit = ['零', '壹', '貳', '叄', '肆', '伍', '陸', '柒', '捌', '玖'];  
    var unit = [ ['元', '萬', '億'], ['', '拾', '佰', '仟']  ];  
    var head = n < 0? '欠人民幣': '人民幣';  
    n = Math.abs(n);  
    var s = '';  
    for (var i = 0; i < fraction.length; i++)   
    {
        s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, ''); 
    } 
    s = s || '整';  
    n = Math.floor(n);  
    for (var i = 0; i < unit[0].length && n > 0; i++)   
    {  
        var p = '';  
        for (var j = 0; j < unit[1].length && n > 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參數

//獲取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隨機返回一個範圍的數字

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隨進產生顏色

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);
clipboard.pngjson

5-7Date日期時間部分

//到某一個時間的倒計時
//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

這個適配的方法不少,我就寫我本身用的方法。你們也能夠去我回答過得一個問題那裏看更詳細的說明!移動端適配問題segmentfault

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.封裝成形

寫了這麼多的操做,小夥伴應該發現了一問題,全局函數太多了

//這樣的話,封裝了幾個操做,就增長了幾個全局函數,污染了全局變量,在開發中應該儘可能避免全局變量。不說別的,若是一個項目,幾我的開發,頗有可能會形成命名的衝突。

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}
可能有小夥伴會有疑問,這樣封裝,調用有點麻煩,爲何不直接在原型上面封裝,調用方便。好比下面的栗子!
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.都是簡單的代碼,封裝也不難。維護也簡單。
廢話就很少說了,上面的只是我本身在開發中經常使用到,但願能幫到小夥伴們,最理想就是這篇文章能起到一個拋磚引玉的做用,就是說,若是以爲還有什麼操做是經常使用的,或者以爲我哪裏寫得很差的,也歡迎指出,讓你們相互幫助,相互學習。

-------------------------華麗的分割線--------------------
想了解更多,關注關注個人微信公衆號:守候書閣

clipboard.png

相關文章
相關標籤/搜索