什么是异步?
<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>
如对本文有疑问, 点击进行留言回复!!
Agora 开源 | 一个 Demo,帮你快速实现社交直播四大场景
vuejs (2)- Vue 生命周期 和 VueJS ajax
网友评论