JS 节流和防抖 判断数组

节流和防抖

防抖

 //防抖 在第一次触发事件时,不立即执行函数,而是给出一个期限值比如200ms  用于停止动作后才开始触发的
    function debounce(fn,delay){
        let timer=null;
        return function(){
            if(timer){
                clearTimeout(timer)//存在即重新计时
                
            }
              timer=setTimeout(fn,delay)
            
        }
    }

节流

//节流 适合一直不给机会触发防抖的
    function throttle(fn,delay){
       
    let valid = true
    return function() {
        
        //闭包函数内的vaild为同一个
       if(!valid){
           
           return false 
       }
       
        valid = false//防止多次触发
        
        setTimeout(() => {
            fn()
            valid = true;
        }, delay)
    }
}



判断是不是数组

var a=new Array()
var b=new Object()

console.log(Array instanceof Object); //true   js数组可以看作对象

console.log(Array.isArray(a)); //true   数组方法

//误区
typeof(a) //object  typeof运算符用于判断对象的类型,但是对于一些创建的对象,它们都会返回'object'  返回的类型 undefined' 'boolean' 'string' 'number' 'object'  'function'

Object.prototype.toString.call(a) //Object Array 用来判断类型

Object.prototype.toString.call(b) //object Object

//Array 和 Function都是Object的实例 都重写了toString()方法 所以直接调用的话是重写后的方法 调用原型上的方法返回类型

//对toString()方法重写的证明
console.log(Array.prototype.hasOwnProperty("toString"));//true

delete Array.prototype.toString;//delete操作符可以删除实例属性

console.log(arr.toString());//"[object Array]"


//  prototype 和__proto__    一般来说 __proto__==constructor.prototype