通宵都要看完这个Web前端关键技术点,16个必备的JavaScript代码片段,2024年大厂前端面经

/**

* 节流,多次触发,间隔时间段执行

* @param {Function} func

* @param {Int} wait

* @param {Object} options

*/

export function throttle(func, wait=500, options) {

//container.onmousemove = throttle(getUserAction, 1000);

var timeout, context, args

var previous = 0

if (!options) options = {leading:false,trailing:true}

var later = function() {

previous = options.leading === false ? 0 : new Date().getTime()

timeout = null

func.apply(context, args)

if (!timeout) context = args = null

}

var throttled = function() {

var now = new Date().getTime()

if (!previous && options.leading === false) previous = now

var remaining = wait - (now - previous)

context = this

args = arguments

if (remaining <= 0 || remaining > wait) {

if (timeout) {

clearTimeout(timeout)

timeout = null

}

previous = now

func.apply(context, args)

if (!timeout) context = args = null

} else if (!timeout && options.trailing !== false) {

timeout = setTimeout(later, remaining)

}

}

return throttled

}

第三个参数还有点复杂,options

  • leading,函数在每个等待时延的开始被调用,默认值为false

  • trailing,函数在每个等待时延的结束被调用,默认值是true

可以根据不同的值来设置不同的效果:

  • leading-false,trailing-true:默认情况,即在延时结束后才会调用函数

  • leading-true,trailing-true:在延时开始时就调用,延时结束后也会调用

  • leading-true, trailing-false:只在延时开始时调用

例子:

Document  

8. cleanObject


去除对象中value为空(null,undefined,‘’)的属性,举个栗子:

let res=cleanObject({

name:‘’,

pageSize:10,

page:1

})

console.log(“res”, res) //输入{page:1,pageSize:10}   name为空字符串,属性删掉

使用场景是:后端列表查询接口,某个字段前端不传,后端就不根据那个字段筛选,例如name不传的话,就只根据pagepageSize筛选,但是前端查询参数的时候(vue或者react)中,往往会这样定义

export default{

data(){

return {

query:{

name:‘’,

pageSize:10,

page:1

}

}

}

}

const [query,setQuery]=useState({name:‘’,page:1,pageSize:10})

给后端发送数据的时候,要判断某个属性是不是空字符串,然后给后端拼参数,这块逻辑抽离出来就是cleanObject,代码实现如下

export const isFalsy = (value) => (value === 0 ? false : !value);

export const isVoid = (value) =>

value === undefined || value === null || value === “”;

export const cleanObject = (object) => {

// Object.assign({}, object)

if (!object) {

return {};

}

const result = { …object };

Object.keys(result).forEach((key) => {

const value = result[key];

if (isVoid(value)) {

delete result[key];

}

});

return result;

};

let res=cleanObject({

name:‘’,

pageSize:10,

page:1

})

console.log(“res”, res) //输入{page:1,pageSize:10}

剩下的8个在这里:

1. 获取文件后缀名


使用场景:上传文件判断后缀名

/**

* 获取文件后缀名

* @param {String} filename

*/

export function getExt(filename) {

if (typeof filename == ‘string’) {

return filename

.split(‘.’)

.pop()

.toLowerCase()

} else {

throw new Error(‘filename must be a string type’)

}

}

使用方式

getExt(“1.mp4”) //->mp4

2. 复制内容到剪贴板


export function copyToBoard(value) {

const element = document.createElement(‘textarea’)

document.body.appendChild(element)

element.value = value

element.select()

if (document.execCommand(‘copy’)) {

document.execCommand(‘copy’)

document.body.removeChild(element)

return true

}

document.body.removeChild(element)

return false

}

使用方式:

//如果复制成功返回true

copyToBoard(‘lalallala’)

原理:

  1. 创建一个textare元素并调用select()方法选中

  2. document.execCommand(‘copy’)方法,拷贝当前选中内容到剪贴板。

3. 休眠多少毫秒


/**

* 休眠xxxms

* @param {Number} milliseconds

*/

export function sleep(ms) {

return new Promise(resolve => setTimeout(resolve, ms))

}

//使用方式

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

Vue

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

解析+核心总结学习笔记+真实项目实战+最新讲解视频】]( )**

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值