节流和防抖
防抖
//防抖 在第一次触发事件时,不立即执行函数,而是给出一个期限值比如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