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.responseType = "json";//定义返回类型

xhr.onload=function(data){

data.currentTarget.response//接口返回结果这样取
xhr.response//或这样取

}//成功 等同于xhr.readState==4&&xhr.status==200  

xhr.onerror=function(){}

xhr.send()

xhr.setRequestHeader('Content-Type', 'application/json')//设置header的需要放在open之后 请求参数为JSON.stringify({})
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')//如果请求参数是formdata则用这个,请求参数为qs.stringify或直接写成'a=b&c=d',如果请求参数是new formdata出来的,则可不必设置请求头

 

 

 

 

对象的

 

检测数据类型的方法

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);
}; 

 

posted @ 2017-11-24 11:07  catalinaScript  阅读(172)  评论(0编辑  收藏  举报