![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
新前端之日常问题收录
收录开发日常问题
肥龙也
肥龙君
展开
-
不需要在讨论0.1+0.2==0.3问题了
ES6的Number.EPSILON可以用来设置“能够接受的误差范围”。比如,误差范围设为 2 的-50 次方(即Number.EPSILON * Math.pow(2, 2)),即如果两个浮点数的差小于这个值,我们就认为这两个浮点数相等。function withinErrorMargin (left, right) { return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2);}0.1 + 0.2 === 0.3原创 2021-10-06 15:06:11 · 120 阅读 · 0 评论 -
简单明了package-lock.json作用
主要解决问题场景:前景:比如你的packgae.json的依赖是"react":"^17.0.2",因为有标识符^,所以如果react模块有在17大版本下更新的小版本17.0.3,npm install时候会自动安装17下的最新版本17.0.3现象:在前景情况下,你本地是"react":"^17.0.2",如果这时候react更新"react":"^17.0.3",别人npm install的时候,安装就是"react":"^17.0.3"。这样导致你们版本不一致,可能引起一些相关错误。...原创 2021-09-17 21:07:59 · 793 阅读 · 0 评论 -
js不用插件如何判断嵌套深层对象是否存在某个属性
let a1 = { b: { c: { d: { e: 1 } } } } let a2 = { c: { d: { e: 1 } } } let a3 = { d: { e: 1 } } let rst1 = getD(a3, 'd.e') console.log(rst1); //为啥需要这样函数,因为嵌套函数,需要判断上一层对象存在才能继续访问子对象,不然会报错 function get...原创 2021-08-28 14:48:10 · 921 阅读 · 0 评论 -
浅层看promise.all异步(并发)执行,和为啥能按序返回
直接看一个示例:Promise.all([ new Promise(function(resolve, reject) { resolve(1) }), new Promise(function(resolve, reject) { resolve(2) }), new Promise(function(resolve, reject) { resolve(3) })]).then(arr => { console.log(arr) // [原创 2021-07-22 12:50:55 · 544 阅读 · 0 评论 -
html解析与css/js加载关系(首屏渲染/白屏优化)
接口返回html文件数据,会进行html文件字节流解析1.开始DOM构建2.如果遇到css文件和js文件,触发预解析线程进行文件预选下载,下载完后,进行CSSOM构建,和js脚本执行,这步骤会阻碍DOM构建,3.执行完2后,继续执行DOM构建简单理解优化白屏问题--就是避免过长阻碍DOM构建,和后面渲染树等流程执行...原创 2021-07-21 00:09:51 · 227 阅读 · 0 评论 -
一个对象解决滚动贯穿问题
/** * 禁止滑动贯穿,passive需要设置为false,表示组织浏览器的默认行为 */const forbidTouchScroll = { bind: (idName, handlerFn) => { document.getElementById(idName).addEventListener("touchmove", handlerFn, { passive: false }) }, unbind: (idName, handlerFn) .原创 2021-07-19 17:05:59 · 62 阅读 · 0 评论 -
水印很难?三步一个水印
1.创建一个div容器,里面放你想要的内容,一个遍历来循环你的内容2.css处理,重点position:fixed,z-index:最高值,这时候有个很重要的点,就是pointer-events:none,这个属性让这个最高层级的div容器,失去获取鼠标目标事件,就是触发事件无法作用到这一层,然后给个倾斜角度transform:rotateZ(-25deg)即可3.最后一步,数量处理,情况1.有写会直接写死数量,动态写死数量,如果页面高度发生变化,水印效果就会发生挤压所以最好方式应该...原创 2021-07-13 10:48:20 · 92 阅读 · 0 评论 -
简单区分防抖和节流概念
防抖:基于触发事件,有新的事件的时间就刷新倒计时,到达规定时间后触发节流:基于单位时,不管事件触发频率多高,只在单位时间内执行一次简单来说:防抖-刷新倒计时,节流-单位时间只执行一次=>防刷节时...原创 2021-06-29 16:51:09 · 180 阅读 · 0 评论 -
call,apply,bind实现+原理
call实现思路:1.判断当前this是否为函数,防止Function.prototype.myCall()直接调用 2.context为可选参数,如果不传的话默认上下文为window 3.为context创建一个Symbol(保证不会重名)属性,将当前函数赋值给这个属性 4.处理参数,传入第一个参数后的其余参数 4.调用函数后即删除该Symbol属性Function.prototype.myCall = function (context = window, ...args) {...原创 2021-06-29 16:26:14 · 99 阅读 · 0 评论 -
数组的下标编号问题
看例子:都在例子里面1.数组默认编号从0开始2.跨下标赋值,比如下标100,会默认插件1-101个数据,没赋值的位undefined3.特殊下标,比如图中k,不会在编号下标展示,但可以遍历拿到原创 2021-06-29 11:14:55 · 239 阅读 · 0 评论 -
js深浅拷贝
浅拷贝1.object.assign2.展开运算符...3.JSON.parse(JSON.stringify())深拷贝1.JSON.parse(JSON.stringify())但是该方法也是有局限性的:A.会忽略undefinedB.会忽略symbolC.不能序列化函数D.不能解决循环引用的对象2.因为有很多边界情况,所以自己手写,也只是大概区分数组对象类型实现。效果并不比情况1好,所以可以采用相关库,比如loadsh,可以按需引入cloneDeep深度原创 2021-06-29 11:08:44 · 57 阅读 · 0 评论 -
一行解决对象数组排序
let newObj={}Object.keys(对象obj).sort().map(key=>newObj[key]=obj[key])原创 2021-06-21 16:19:25 · 80 阅读 · 0 评论 -
js扁平化为一维数组+柯里化
1.扁平化2.柯里化扁平化方法function curry(func) { return function curried(...args) { if (args.length >= func.length) { return func.apply(this, args); } else { return function(...args2) { return curried.apply(this, args.co.原创 2021-06-21 14:52:09 · 58 阅读 · 0 评论