持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第30天,点击查看活动详情
目录
今日题
题目
实现一个类:VerifyType
功能:
// 生成一个用户对象格式验证器
const verifyUserType = new VerifyType({
name: String,
age: Number,
sex: String,
account: String,
friends: [{
name: String,
account: String,
addTime: Number
}]
})
// 测试用户
const user = {
name: "张三",
age: 18,
sex: "男",
account: "111222333",
friends: [{
name: "李四",
account: "222333444",
addTime: 12345678900
}, {
name: "王五",
account: "333444555",
addTime: 98765432100
}]
}
// 调用verify方法查看是否通过
verifyUserType.verify(user) // true
分析
这题中可以在实例对象的时候,把传入的格式对象存储起来,接着当调用verify
方法的时候,遍历格式对象,通过对象键值对应的特性和利用数据下面的constructor属性来确认格式是否正确
当遇到数组类型的数据时候,递归调用验证方法
昨日题
题目
上一次我们学习js数据请求中的防抖,这一次我们继续来学习js中另外一个数据请求的小技巧---节流 节流的目的同样是为了减轻服务器的压力但是与防抖不同的是防抖没有时间因素的干涉。而节流就像水管中的节流阀一样,会把一段时间内的一次请求存蓄起来。在一个时间段内释放。
答案
无固定答案,下面仅展示部分实现案例
let b = false;
for(let i = 0; i <= 10; i++) {
console.log(`${i}发送请求中`);
if(!b) {
b = true;
setTimeout(() => {
console.log("请求成功");
b = false;
}, 1000);
}
}
解析
节流,可以理解为一定时间内只能请求一次,多于的请求直接去掉
节流的实现离不开一个重要的变量,叫做:节流阀
我们可以看一下实现案例,for
循环的作用是模拟用户连续发送了10次请求
for(let i = 0; i <= 10; i++)
而在所有请求发送之前有初始化一个变量b
,这变量在这个案例中就充当起了节流阀的作用,它的初始值为false
表示没有请求处于发送中
let b = false;
当有一个请求要准备发送出去的时候,检查当前节流阀是否有请求处于请求中状态,如果有,节流阀的值应该为true
,所有在案例中还做了这样一步判断
if(!b)
条件通过表示没有请求处于请求中状态,就可以发送出一个请求,在发送请求后修改节流阀的值为true
,防止后面有请求想要发送出去
b = true;
在案例中还开启了一个定时器setTimeout
来模拟请求资源的时间,在定时器结束后也就是资源请求到了,再次修改节流阀的值为false
,表示没有请求处于请求中状态,可以发送另一个请求了
setTimeout(() => {
b = false;
}, 1000);
在整个案例中,节流阀起到了至关重要的作用,在节流阀处于true
的状态中接收到要发送出去的请求都会被直接排除掉,这也是节流为什么叫节流,请求都发送不出去,这流量不就节省了吗,当然开发者可能想节省的不是你的流量,而是服务器的流量
结语
此文章已收录至《JavaScript每日一题》专栏,如果你对本专栏有任何建议,欢迎反馈。如果你对此文章中的题目还有不懂的地方,那么请在评论区留言与大家一起讨论吧。创作不易,少年,就请留个赞再走吧!