小知识--持续更新

299 阅读2分钟

-------npm link

今天发现自己本地开发的一个插件在执行sudo npm link后,npx [插件名],一直报错:Permission denied

解决方法 :添加读取和可执行权限执行以下命令

sudo chmod 755 [插件名]

-------什么是闭包:

什么是闭包:“函数”和“函数内部能访问到变量”的总和就是闭包

使用闭包的目的:隐藏变量或间接访问一个变量 参考地址:zhuanlan.zhihu.com/p/22486908

-------script defer async

async 异步加载资源,且加载完JS资源立即执行,并不会按顺序,谁快谁先上

defer 异步加载资源 ,DOM渲染结束或,按顺序执行

参考地址:www.cnblogs.com/jiasm/p/768…

--------浅比较、深比较、深拷贝

浅比较基础类型对比值、引用类型对比内存地址 == 和===都是浅比较

深拷贝:deepClone基础类型直接返回,Date 和 RexExp类型返回new Date(obj)/new RexExp(obj),object或数组类型cloneObj = new obj.constructor(),再遍历obj将obj的每个属性经过deepClone后传给cloneObj

参考地址:zhuanlan.zhihu.com/p/256072182

--------h5获取电池信息

window.navigator.getBattery().then(res=>console.log(res))

{

charging: true 是否在充电

chargingTime: 0 充电还需多长时间(秒)

dischargingTime: Infinity 电池剩余可用时间(秒)

level: 1 剩余电量,最大为1

onchargingchange: null 充电状 态改变时触发该监听函数

onchargingtimechange: null 充满还需时间改变时触发该监听函数

ondischargingtimechange: null 电池剩余可用时间改变时触发该监听函数

onlevelchange: null 电量改变时触发该监听函数

}

参考地址:前端(h5)js监控手机电池状况(是否充电、剩余电量、剩余可用时间等等)

--------小数相加的问题 例如0.1+0.2结果为0.30000000000000004

计算精度缺失原因:有些十进制无法准确转换为二进制,js中数字都是用浮点数表示的,并且用双精度浮点数表示

简单的可以用以下方法,复杂的可以使用big.js 或者math.js

function add() { 
    const args = [...arguments]; 
    const digit = Math.max( 
    ...args.reduce( 
        (res, cur) => [...res, cur.toString().split(".")[1]?.length || 0], [] ) 
    ); 
    const baseNum = Math.pow(10, digit); 
    return args.reduce((res, cur) => res + cur * baseNum, 0) / baseNum; 
}

但是有时有乘法也会出问题比如512.06*100结果会是51205.99999999999,所以 cur * baseNum可以替换为移动小数点上的方式

参考地址:www.cnblogs.com/jice/p/1004…

--------rem

rem相对于跟元素设置的font-size的相对值,例如跟元素设置的是100px,那么1rem就为100px

一般我们可以根据获取屏幕宽度和设计稿宽度的比例来自动更改这个值

例如我们基于750的屏幕设置这个值为75

那么 我们可以根据document.documentElement.clientWidth/750*100来设置html的font-size

另外还可以用csstorem插件来自动将px更改为rem,只需要设置rootvalue的默认值,根据document.documentElement.clientWidth/750*rootvalue来在浏览器尺寸改变是修改html的值就可以了