* 防抖:指定时间内 频繁触发一个事件,以最后一次触发为准
* 节流:指定时间内 频繁触发一个事件,只会触发一次
> 应用场景有很多比如:
>
> 防抖是: input搜索,用户在不断输入内容的时候,用防抖来减少请求的次数并且节约请求资源
>
> 节流:场景普遍就是按钮点击,一秒点击 10 下会发起 10 次请求,节流以后 1 秒点再多次,都只会触发一次
下面我们来实现
~~~
js复制代码 // 防抖
// fn 需要防抖的函数,delay 为定时器时间
function debounce(fn,delay){
let timer = null // 用于保存定时器
return function () {
// 如果timer存在 就清除定时器,重新计时
if(timer){
clearTimeout(timeout);
}
//设置定时器,规定时间后执行真实要执行的函数
timeout = setTimeout(() => {
fn.apply(this);
}, delay);
}
}
// 节流
function throttle(fn) {
let timer = null; // 首先设定一个变量,没有执行定时器时,默认为 null
return function () {
if (timer) return; // 当定时器没有执行的时候timer永远是false,后面无需执行
timer = setTimeout(() => {
fn.apply(this, arguments);
// 最后在setTimeout执行完毕后再把标记设置为true(关键)
// 表示可以执行下一次循环了。
timer = null;
}, 1000);
};
}
~~~
- Js方法速查表
- Js 代码片段
- Js中类型判断
- 判断类型函数
- 处理 null、NaN 和 undefined 的 JS 代码片段
- 检查是否为null
- 检查undefined
- 检查 NaN
- 如果为 null 或undefined则默认为某个值
- 如果为 NaN,则默认为一个值
- 检查值是否为 null、undefined或 NaN
- 可选链接(?.)
- 空合并运算符(??)
- 将 null 或 undefined 转换为布尔值
- 将 NaN 转换为布尔值
- 处理函数参数中的 null 或 undefined
- 从数组中删除 null 或undefined的值
- 检测:是否是一个函数
- 函数:是否属于异步函数
- 检测:是否为一个安全数组
- 检测:对象是否为一个安全对象
- 字符串相关方法
- 字符串填充:padStart 和 padEnd
- 字符串反转:reverse
- 第一个字母大写:toUpperCase
- 字符串数组分割:扩展运算符
- 使用多个分隔符分割字符串
- 检查字符串是否包含:includes
- 检查字符串的开头或结尾是否有特定序列:startsWith 和 endsWith 方法
- 字符串替换:正则或replaceAll
- 数字:截断数字
- 数字:四舍五入
- 数字:补零
- 数组相关方法
- 数组:找到最接近的数值
- 数组:生成数组
- 数组:打乱数组
- 数组:简单数据去重
- 数组:唯一值数据去重
- 数组:多数组取交集
- 数组:查找最大值索引
- 数组:查找最小值索引
- 数组:压缩多个数组
- 对象相关方法
- 对象:删除无效属性
- 对象:反转对象键值
- 对象:字符串转对象
- 比较两个对象
- Js中判断空对象
- 正则表达式
- 正则:手机号格式化
- 正则:去除多余空格
- 正则:每千位添加分隔符
- 正则:校验6到18位大小写字母数字下划线组成的密码
- 日期相关的方法
- 日期:判断日期是否为今天
- 日期:日期转换
- 日期:秒数转换
- 日期:获取某年某月的第一天
- 日期:获取某年某月的最后一天
- 日期:获取某年月份天数
- 本地存储相关方法
- 获取cookie
- BOM相关
- Web:重新加载当前页面
- Web:滚动到页面顶部
- Web:元素滚动
- Web:检查当前是否IE浏览器
- Web:从给定文本中剥离html
- 常用高频方法
- 防抖/节流
- 进制转换
- 复制文本
- 过滤特殊字符
- 随机颜色生成
- 将16进制的颜色转换成rgb
- 将 RGB 转换为十六进制
- 获取随机ip
- uuid:需要生成一个id
- 强制等待
- Ts 代码片段
- omit函数