美文网首页
放进收藏夹,省下时间睡觉!

放进收藏夹,省下时间睡觉!

作者: 流光号船长 | 来源:发表于2017-12-18 19:09 被阅读0次

    1. 数组去重

    [...new Set([2,"12",2,12,1,2,1,6,12,13,6])]
    //[2, "12", 12, 1, 6, 13]
    //es6的新特性
    

    2. 深浅拷贝

    • 浅拷贝

    var myInfo={name:'守候',sex:'男'};
    var newInfo=myInfo;
    
    • 深拷贝

    1. 假深拷贝
    var myInfo={name:'守候',sex:'男'};
    var newInfo=Object.assign({},myInfo)
    
    1. 真深拷贝
    var newArr2=JSON.parse(JSON.stringify(arr));
    console.log(arr[0])//{a:1,b:2}
    newArr2[0].a=123
    console.log(arr[0])//{a:1,b:2}
    

    3. 事件委托

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <ul id="ul-test">
                <li>0</li>
                <li>1</li>
                <li>2</li>
                <li>3</li>
                <li>4</li>
                <li>5</li>
                <li>6</li>
                <li>7</li>
                <li>8</li>
                <li>9</li>
            </ul>
        </body>
        <script type="text/javascript">
            var oUl=document.getElementById("ul-test");
            oUl.addEventListener("click",function(ev){
                var ev=ev||window.event;
                var target=ev.target||ev.srcElement;
                //如果点击的最底层是li元素
                if(target.tagName.toLowerCase()==='li'){
                    alert(target.innerHTML)
                }
            })
        </script>
    </html>
    

    5. 使用push和apply合并数组

    var arr1=[1,2,3,4,5],arr2=[6,7,8,9,10];
    arr1.push.apply(arr1,arr2);
    console.log(arr1)//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    

    6. toFixed保留整数

    var a=123.36896335.toFixed(2)
    console.log(a)//'123.37'
    a=+a
    console.log(a)//123.37
    var a=123.36896335.toFixed(2)
    console.log(a)//'123.37'
    a=a|0  
    console.log(a)//123 
    //---------------------------------分割线
    var a=123.36896335.toFixed(2)
    console.log(a)//'123.37'
    a=~~a  
    console.log(a)//123      
    

    7. 缓存变量

    • for循环缓存length
    var arr=[1,2,3,4,5,6]
    for(var i=0,i<arr.length;i++){
        ...
    }
    //------------------------分割线
    var arr=[1,2,3,4,5,6]
    for(var i=0,len=arr.length;i<len;i++){
        ...
    }
    
    • 元素事件
    $('.div1').click(function(){
       ...
    })
    //--------------------------分割线   
    var $div1=$('.div1');
    $div1.click(function(){
       ...
    })
    
    

    8. 使用innerHTML添加元素

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <ul id="ul-test">
                
            </ul>
        </body>
        <script type="text/javascript">
            var oUl=document.getElementById("ul-test");
            //createElement方式
            console.time();
            for(var i=0;i<10;i++){
                var oLi=document.createElement('li');
                oLi.innerHTML=i;
                oUl.appendChild(oLi);
            }
            console.timeEnd();
            //innerHTML方式
            console.time();
            var _html='';
            for(var i=0;i<10;i++){
                _html+='<li>'+i+'</li>'
            }
            oUl.innerHTML=_html;
            console.timeEnd();
        </script>
    </html>
    

    9. 函数节流

    function delayFn2 (fn, delay, mustDelay){
         var timer = null;
         var t_start;
         return function(){
             var context = this, args = arguments, t_cur = +new Date();
             //先清理上一次的调用触发(上一次调用触发事件不执行)
             clearTimeout(timer);
             //如果不存触发时间,那么当前的时间就是触发时间
             if(!t_start){
                 t_start = t_cur;
             }
             //如果当前时间-触发时间大于最大的间隔时间(mustDelay),触发一次函数运行函数
             if(t_cur - t_start >= mustDelay){
                 fn.apply(context, args);
                 t_start = t_cur;
             }
             //否则延迟执行
             else {
                 timer = setTimeout(function(){
                     fn.apply(context, args);
                 }, delay);
             }
         };
    }
    var count=0;
    function fn1(){
        count++;
        console.log(count)
    } 
    //100ms内连续触发的调用,后一个调用会把前一个调用的等待处理掉,但每隔200ms至少执行一次
    document.onmousemove=delayFn2(fn1,100,200)
    

    相关文章

      网友评论

          本文标题:放进收藏夹,省下时间睡觉!

          本文链接:https://www.haomeiwen.com/subject/logmwxtx.html