掘友等级
获得徽章 0
#每天一个知识点#
#javaScript
常量const算不算不可变:
1.如果const声明的变量赋值给了原始类型,如数字、bool、字符串,此时就是不可变的
2.如果const声明的变量赋值了复合类型,如数组、对象,此时变量指向的地址不可比变,但是复合类型的内容还是可以调整的, 如更改对象的属性值,这时候就是可变的
#每天一个知识点#
#javaScript
如何减少函数的副作用:纯函数和不可变
纯函数:一个函数返回结果的变化只依赖其参数,并且执行过程中没有副作用
不可变:减少程序被外界影响的同时,也减少对外界的影响
从值的角度:“纯函数”对值只影响一次,而“不可变”完全不影响
#每天一个知识点#
js函数式编程的副作用(主要是不可控的外部环境):
1.全局变量
2.IO 影响:类似前端浏览器中的用户行为,比如鼠标和键盘的输入,或者如果是服务器端的 Node 的话,就是文件系统、网络连接以及 stream 的 stdin(标准输入)和 stdout(标准输出)
3.网络请求
#每天一个知识点#
Vue2中修改指定数组的方法:array.splice(ind, 1, newValue);
#每天一个知识点#
CSS中的has() 选择器:允许根据子元素来为父元素设置样式
#每天一个知识点#
浏览器渲染过程:
1.解析HTML,生成DOM树
2.解析CSS,生成CSSOM树
3.将DOM树和CSSOM树结合,生成渲染树(Render Tree)
4.Layout(回流):根据生成的渲染树,进行回流(Layout),得到节点的几何信息(位置,大小)
5.Painting(重绘):根据渲染树以及回流得到的几何信息,得到节点的绝对像素
6.Display:将像素发送给GPU,展示在页面上。(这一步其实还有很多内容,比如会在GPU将多个合成层合并为同一个层,并展示在页面中
#每天一个知识点#
Promise
三种状态:pending:Promise的初始状态,表示异步操作正在执行
fulfilled:异步操作成功完成,并返回一个值,称为解决值(fulfillment value)
rejected:异步操作失败或被拒绝,并返回一个原因(reason),通常是一个错误对象
#每天一个知识点#
HTTP协议常用状态码的具体含义:
1.200:成功访问了资源
2.404:页面未找到
3.301:永久重定向
4.302:临时重定向
5.303:临时重定向后用GET方法获取资源
6.401:需要身份验证,网络环境下的认证是HTPP认证(BASIC认证、DIGEST认证)
7.403:客户端没有访问权限,访问被服务器拒绝了
8.503:服务器暂时无法响应请求
9.500:服务器发生了内部错误
#每天一个知识点#
CSS预处理器:less、sass、stylus
预处理器的作用:1.更好地组织CSS代码
2.提高代码复用率
3.提升可维护性
#每天一个知识点#
首屏加载优化有哪些方案:
1.Vue-Router路由懒加载(利用Webpack的代码切割)
2.使用CDN加速,将通用的库从vendor进行抽离
3.Nginx的gzip压缩
3.Vue异步组件
4.服务端渲染SSR
5.如果使用了一些UI库,采用按需加载
6.Webpack开启gzip压缩
7.如果首屏为登录页,可以做成多入口
8.Service Worker缓存文件处理
#每天一个知识点#
今日学习知识点:如何解决前端精度丢失问题?
-前端精度丢失情况之一:后端给前端返回一个数字类型的id,前端对这个id不做任何处理,直接使用到下一个给后端请求的时候,接口会报错
-精度丢失原因:后端给的数字太大超过-9007199254740991 (-(2^53-1))9007199254740991(2^53-1)之间的整数,前端js这块就会自动四舍五入
-解决:把它转化为字符串
#每天一个知识点#
vue3使用reactive的时候数据更新了但是页面不更新有什么比较好的解决方法吗?
#每天一个知识点#
isNaN() 和 Number.isNaN()函数的区别
-isNaN() :通过Number方法把参数转换成数字类型,若转换成功,则返回false,反之返回true
只是判断参数是否能转成数字,不能用来判断是否严格等于NaN
-Number.isNaN():用来判断一个值是否严格等于NaN,先判断传入的值是否是否为数字类型,不是则返回false
#每天一个知识点#
js字符串切割常用的几种方法
- split() :把一个字符串分割成字符串数组,但不改变原始字符串
用法:string.split(separator,limit)
separator:字符串或正则表达式,从该参数指定的地方分割 string
limit:如果没有设置该参数,则整个字符串都会被分割
-slice():可提取字符串的某个部分,并以新的字符串返回被提取的部分
用法:array.slice(start, end)
start:必要参数,说明从何处开始选取,如果为负数,则表示从原数组中的倒数第几个元素开始选取
end:说明从何处结束选取,如果是负数,则它表示在原数组中的倒数第几个元素结束选取
-substring():用来提取字符串中介于两个指定下标之间的字符
用法:string.substring(from, to)
from:必要参数,为非负整数,说明要选取的子串的第一个字符在 string中的位置
to:为非负整数,比要选取的子串的最后一个字符在 string 中的位置多1,如果省略该参数,那么返回的子串会一直到字符串的结尾
-join():用于把数组中的所有元素转换一个字符串
用法:array.join(parameter)
parameter:指定的分隔符,如果省略此参数,则用逗号隔开
#每天一个知识点#
什么时候不可以使用箭头函数?
-对象方法中不适用
箭头函数的this永远指向函数的调用者
箭头函数中,this 指向的是定义时所在的对象,而不是使用时所在的对象。意思是说,箭头函数没有自己的 this,而是继承父作用域中的 this
-原型方法中不适用
-构造函数中不适用
构造函数是通过 new 关键字来生成对象实例,生成对象实例的过程也是通过构造函数给实例绑定 this 的过程,而箭头函数没有自己的 this
-动态上下文中的回调函数不适用
-Vue 生命周期和 method 中也不能使用箭头函数
#每天一个知识点#
遍历方法的区别
#forEach()
-array.forEach(callbackFn(value, index, arr))
-没有返回值
-回调函数中有三个参数 :value:遍历的数组内容
index:对应的数组索引
array:数组本身
#map()
-返回值是由原数组每个元素执行回调函数的结果组成的新数组,愿数组不变
-不能中断break,否则引发异常
#每天一个知识点#
遍历方法的不同
#for in
-会对对象的属性进行枚举
-不建议用来遍历数组
#for of
-遍历得到的是数组的值,对象的value
#每天一个知识点#
#instanceof的原理:判断构造函数的prototype属性是否出现在对象的原型链上
-可以用来弥补 Object. prototype. toString. call()不能判断自定义实例化对象的类型
-但是instanceof 只能用来判断对象类型
-返回的是一个布尔值
#每天一个知识点#
#【js】深拷贝
-JSON.parse(JSON.stringify())
注:不能拷贝一条特殊对象 RegExp Date Set Map
-递归
#每天一个知识点#
#ES6新特性
-扩展运算符...:取出参数对象的所有可遍历属性
下一页