zoukankan      html  css  js  c++  java
  • JS异步单线程与内置对象面试

    什么是异步?

        <script>
            //异步
            console.log(1);
            setTimeout(function(){
                alert(2);
            },1000);
            console.log(3);
    
            //同步,存在阻塞
            console.log(1);
            alert(2);//不点击确定,不会打印3
            console.log(3);
        </script>

    何时需要异步?

    可能发生等待的情况

    等待的过程不能阻塞程序运行

    前端使用异步的场景:

    1、定时任务 setTimtout  setInterval

    2、网络请求 ajax请求 动态img加载

    3、事件绑定

        <script>
            console.log('start');
            $.get('/test.json',function(data){
                console.log(data);
            })
            console.log('end');
        </script>

        <script>
            console.log('start');
            
            var img=document.createElement('img');
            img.onload=function(){
                console.log('loaded');
            }
            img.src="error.png";
            document.body.appendChild(img);
            
            console.log('end');
        </script>

        <script>
            console.log('start');
            
            var btn=document.getElementById('btn');
            btn.onclick=function(){
                console.log('clicked');
            }
    
            console.log('end');
        </script>

    异步和单线程-单线程:

    单线程的特点:不能同时干两件事

    先执行同步的代码,将异步的代码暂存起来,不会立即执行

    等所有程序执行完,处于空闲时间,查看有没有暂存的代码需要执行

    如果有,则执行暂存的代码

    日期和Math:

            console.log(Date.now());//获取当前时间的毫秒数
            var dt=new Date();
            console.log(dt.getTime());//毫秒数
            console.log(dt.getFullYear());//年
            console.log(dt.getMonth());//月(0-11)
            console.log(dt.getDate());//日
            console.log(dt.getHours());//小时
            console.log(dt.getMinutes());//分
            console.log(dt.getSeconds());//秒

    数组API:

    forEach 遍历所有元素

            //forEach
            var arr=['a','b','c'];
            arr.forEach(function(item,index){
                console.log(item+'+'+index);
            })

    every 判断所有元素是否都符合条件

            //every
            var arr=[1,2,3,4];
            var res=arr.every(function(item,index){
                if(item<4){
                    return true;
                }
            });
            console.log(res);

    some 判断是否至少有一个元素符合条件

            //some
            var arr=[1,2,3,4];
            var res=arr.some(function(item,index){
                if(item<4){
                    return true;
                }
            });
            console.log(res);

    sort 排序

            //sort
            var arr=[2,5,3,4,1];
            var res=arr.sort(function(a,b){
                return a-b;//从小到大
            })
            console.log(res);

    map 对元素重新组装,生成新数组

            //map
            var arr=[1,2,3];
            var res=arr.map(function(item,index){
                return '<b>'+item+'</b>';
            })
            console.log(res);

    filter 过滤符合条件的元素

            //filter
            var arr=[1,2,3,4];
            var res=arr.filter(function(item,index){
                if(item<3){
                    return true;
                }
            });
            console.log(res);

    对象API:

            var obj={
                a:1,
                b:2,
                c:3
            }
            for(var key in obj){
                if(obj.hasOwnProperty(key)){
                    console.log(key+':'+obj[key]);
                }
            }

        <script>
            //获取指定格式的日期
            function formatDate(dt){
                if(!dt) return new Date();
    
                var year=dt.getFullYear();
                var month=dt.getMonth()+1;
                var date=dt.getDate();
    
                if(month<10){
                    month='0'+month;
                }
                if(date<10){
                    date='0'+date;
                }
    
                return year+'-'+month+'-'+date;
            }
            var dt=new Date();
            console.log(formatDate(dt));
        </script>

        <script>
            //获取随机数,长度为指定长度
            //如:指定返回长度为10的随机数
            var random=Math.random();
            var random=random+'0000000000';
            //超出10位只截取前10位,不足10位补0
            random=random.slice(0,10);
            console.log(random);
        </script>

    封装一个能同时遍历数组和对象的函数

        <script>
            //能同时遍历数组和对象
            function fn(obj){
                if(obj instanceof Array){
                    //数组
                    obj.forEach(function(item,index){
                        console.log(index+':'+item);
                    })
                }else{
                    //对象
                    for(var key in obj){
                        if(obj.hasOwnProperty(key)){
                            console.log(key+':'+obj[key]);
                        }                   
                    }
                }
            }
            var arr=['a','b','c'];
            fn(arr);
            var obj={name:'cyy',age:18};
            fn(obj);
        </script>

  • 相关阅读:
    JAVA与.NET的相互调用——通过Web服务实现相互调用
    WCF大数据量传输配置
    WCF大数据量传输解决方案
    C# #if DEBUG
    我对CSS vertical-align的一些理解与认识(一)
    htmlparser使用例子(全) 转载
    【HtmlParser】HtmlParser使用
    HTMLParser 使用详解
    htmlparser源码简单分析
    利用OpenXml生成Word2007文档
  • 原文地址:https://www.cnblogs.com/chenyingying0/p/12734798.html
Copyright © 2011-2022 走看看