js基础
字符串的方法
数组的方法
数组的变异(括号里的会改变原数组)
(pop push unshift shift splice reverse sort) indexof lastIndexof concat slice
.forEach(function(item,index){不支持return})
for in可以遍历对象
for of不能遍历对象,只能遍历数组,并且支持return
filter(function(item,index){return 条件})满足条件则item添加到新数组并返回新数组,不会更改原数组
map(function(item,index){return 条件})每个item经过条件 返回新数组,不会更改原数组
includes()是否包含
find(function(item,index){return 条件})返回满足该条件的item
some(function(item,index){return 条件})是否存在这么个元素,返回布尔值,存在返回true停止遍历
every(function(item,index){return 条件})每个元素是否满足条件 有一个不满足返回false 并停止遍历循环
以上第二个参数是this指向
数组 .reduce(function(prev,next,index,item){
循环数组,第一次prev是第0项,next是第1项,index是1,item是原数组
第二次prev是undefined,next是第二项
return 的值作为下一次循环的prev值
},数组的第0个位置的元素)
箭头函数:参数只有一个时可以省略();
不拥有this,this就是上级作用域的
函数闭包,函数执行的瞬间都会形成闭包,后被垃圾回收,
函数形成闭包的条件:函数被变量接收,返回引用类型的数据,则函数不会被回收
回调:做完这个->做另一个,一步接一步
异步回调:等待做完这个->在做另一个
异步的例子:
let eat="empty"; function buyFood(){ eat="temp"; setTimeout(function(){eat="meat"},0)//setTimeout是另一个队列 } buyFood(); console.log(eat)//temp
异步回调的原生解决方案:
function buyFood(calc){ setTimeout(function(){ let eat="meat"; calc(eat); },0) } function cookie(eat){ console.log('cookie the '+eat) } buyFood(cookie);//cookie the meat
promise:解决异步回调问题
new Promise(执行器即函数) new时函数立刻执行,没有时间等待
function buyPack(){ return new Promise((resolve,reject)=>{
console.log('want a package')//没有时间等待马上就打印出来 setTimeout(function(){ resolve('buy package') },2000) }) } buyPack().then((data)=>{ console.log(data) })
只有promise对象有then方法
ajax四部曲:
let xhr=new XMLHttpRequest();
xhr.open(type 'get'或'post',url,true异步 false同步);
xhr.onload=function(data){
}//成功 等同于xhr.readState==4&&xhr.status==200
xhr.onerror=function(){}
xhr.send()
对象的
检测数据类型的方法
typeof instanceof construct Object.prototype.toString.call(对象).slice(8,-1)
Math的
Date的
重点
object的每条属性 有四个细分属性{value:,writable:可写,enumerable:可枚举,configurable:可配置}可通过Object.defineProperty或Object.defineProperties来设置
object的属性值:可以用get方法返回和set方法表示可设置
函数
作用域,闭包,每个函数都会有prototype这个属性 ,prototype还有constructor属性,这个属性的值就是该构造函数,通过new来创建的实例指向(等于)构造函数的prototype对象
es6
解构赋值,扩展运算符
set,map构造函数
Proxy对对象的访问做拦截
Object的方法在Reflect上都有
数据类型:String、Number、Boolean、Object、undefined、null、Symbol,都可以直接调用(加上())
Promise对象有then(第一个参数是成功的回调函数,第二个参数是失败的回调函数),有catch方法,是专门针对错误回调函数的,Promise()方法参数是一个函数,函数的参数有resolve,reject
Promise有all和race方法,接收一个数组,all表示所有异步执行后执行,race表示最先的异步执行后执行
await等待异步操作执行完毕,在接着执行下行的代码,需要搭配async关键字
class 声明类,类等于es5的构造函数,类里面的方法都是在构造函数的prototype上添加,类和实例的关系:类通过new创建实例,类的constructor里的this指代实例,实例的__proto__属性指代类
函数节流:最终的效果就是不论滚动速度,滚动一次只执行一次
函数防抖:最终的效果就是,手抖滚动然后停止,只在连续滚动事件的最后一次滚动执行想要的操作
var timer = false; document.getElementById("debounce").onscroll = function(){ clearTimeout(timer); // 清除未执行的代码,重置回初始化状态 timer = setTimeout(function(){ console.log("函数防抖"); }, 300); };