- 博客(172)
- 收藏
- 关注
原创 谈谈 Object.defineProperty 与 Proxy 的区别?
Objet.defineProperty() 可以定义一个对象的属性或修改对象上已存在的属性,并返回这个对象。第三个参数 descriptor。它是属性描述符,MDN 中描述如下:对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。${${虽然监听到了数组的变化,但是代码A、B、C处理想情况下,希望它触发set操作,但此处并没有属性。因此,操作数组的push方法、修改数组长度length都无法监听到正确结果。
2024-08-28 23:17:10
759
原创 js循环引用
(circular references)是指在对象之间存在相互引用的情况,形成一个闭环,导致对象无法被完全释放和垃圾回收。循环引用发生在当一个对象的属性或成员引用另一个对象,并且这个被引用的对象又直接或间接地引用回原始对象,从而形成一个循环。当存在循环引用时,JavaScript的垃圾回收机制可能无法正确地处理这些对象,因为它们之间的引用形成了一个无法访问的闭环,无法确定哪些对象是不再被使用的。这可能导致内存泄漏,即占用的内存无法被回收,最终导致内存资源的浪费和性能问题。
2024-08-28 21:54:47
591
原创 异步编程-如何实现红绿灯效果?
delay() 函数是我们创建的一个返回 Promise 的函数,这个函数在指定时间后异步调用回调函数,注意代码 A 处.await 函数接收一个 Promise,并且等待 Promise resolve 之后再继续执行后续代码。light() 是一个带有 async 关键字的函数,代表这是个异步函数。
2024-08-28 20:51:09
185
原创 介绍一下 async/await
async/await 实际上是 Promise 的语法糖,它可以用一种更舒适的方式使用 Promise,更易于理解和使用。async 关键字放在函数前面,表达这个函数总是返回一个 Promise,其他值将自动被包装在一个 resolved 的 Promise 中。return 1;await 关键字可以暂停函数的执行,直到 Promise 的状态变成已敲定,然后 Promise 的结果继续执行。相比于 promise.then,它显得更为优雅。如果在非 async 中使用,会报语法错误。
2024-08-28 20:42:57
190
原创 生成器Generator
常规函数只会返回一个单一值(或者不返回值),而 ES6 的generator 可以按需一个接一个地返回(yield)多个值。yield* 表达式迭代操作数,并产生它返回的每个值。当调用 next() 方法的时候,yield 将返回值添加到对象的 value 属性上。同样,我们也可以使用 for…of 循环遍历 generator 所有的值。输出:1 a b c 2。
2024-08-28 20:36:13
144
原创 ES6 中的 Iterator 和 Iterable
String、Array、TypedArray、Map、Set 都是内置的可迭代对象,因为它们的每个 prototype 对象都实现了 @@iterator方法。要成为可迭代对象,该对象必须实现 @@iterator 方法,可通过常量 [Symbol.iterator] 访问该属性,它的返回值为一个符合迭代器协议的对象。可迭代协议允许 JavaScript 对象定义或定制它们的迭代行为,例如,在一个 for…生成器函数(generator)返回生成器对象,它们是可迭代的迭代器。
2024-08-28 20:29:31
256
原创 箭头函数的特点
箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this,arguments,super或new.target。由于箭头函数没自己的this,通过这些方法调用一个函数时,只能传递参数,他们的第一参数会被忽略,既不能绑定this。没有单独的this,箭头函数不会创建自己的this,它只会从自己作用域链的上一层继承this。鉴于 this 是词法层面上的,严格模式中与 this 相关的规则都将被忽略。箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数。
2024-08-28 20:03:51
282
原创 前端JS的6种继承方法
通过Parent构造函数的属性设置Say方法,此时,Parent有两个属性和一个方法。设置Son属性值为父构造函数Parent的实例对象,即子构造函数Son继承了父构造函数Parent,此时Son也有2个属性和1个方法。缺点:①因为Son.prototype(即原型对象)继承了Parent实例化对象,这就导致了所有Son实例化对都一样,都共享有原型对象的属性及方法。借助原型可以基于现有方法来创建对象,var B = Object.create(A) 以A对象为原型,生成A对象,B继承了A的所有属性和方法。
2024-08-28 14:31:44
676
原创 进程、线程和协程的理解
在引入此线程的操作系统中,线程是进程的实体,是系统独立调度和分派的基本单位。由于用户线程不依赖操作系统内核,因此操作系统内核是不知道用户线程的存在,用户线程是由用户来管理和调赴的,用户利用线程库提供的API来创建、同步、掉单独和管理线程。由于操作系统不知道用户线程的存在,所以操作系统把CPU的时间片分给用户进程,再由用户进程的管理器将时间分配给用户线程。协程和线程的区别:协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时协程也失去了标准使用CPU的能力。
2024-08-27 21:30:51
232
原创 前端编程-版本号比较、完全平方数、口罩问题
比较一组版本号,将其按从小到大的顺序排列。输入例子:[“2.1.0”, “1.5”, “2”, “1.1.999.1.2.3”, “0.10.0”]输出例子:[“0.10.0”, “1.1.999.1.2.3”, “1.5”, “2”, “2.1.0”]
2024-08-27 21:17:25
230
原创 跨域请求避免OPTIONS请求(预检请求)
一般来说,使用 application/json 的post请求是必然带入OPTIONS请求。OPTIONS请求也被成为预检请求,:调用请求方法、去除自定义header、修改Content-Type,基于可以避免该请求发出OPTIONS预检请求。介绍:有时候前后端分离域名不一致,会造成跨域请求,而跨域请求有时候自动发起两次请求,但是在有些get请求中也会OPTIONS请求,这里补充下回发生options的情况。
2024-08-27 19:53:33
294
原创 position的几个属性
④ 提升层级 (z-index样式的值可以改变一个定位的层级关系,从而改变元素的覆盖关系,值越大越在上面,z-index只能在position属性值为relative或absolute或fixed的元素上有效)(两个都为定位元素,后面的会覆盖前面的定位)④ 相对于最近一个有定位元素偏移(若其父元素没有定位则逐层向上找,直到document——页面文档对象)⑤ 相对于定位一般配合绝对定位使用(将父元素设置相对定位,使其相对于父元素偏移)② 使内联元素在设置宽高的时候支持宽高(改变内联元素的特性)
2024-08-27 19:25:44
283
原创 js如何终止forEach()循环
forEach 专门用来循环数组,还可以直接取到元素,同时也可以取到index,存在局限性,不能continue跳过或break终止,没有返回值,所以不能return。终止forEach循环,运用抛出异常(try catch)可以终止forEach。
2024-08-27 19:10:47
334
原创 前端编程题——一个字符或字符串在另一个字符串中的次数
**match()***在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。它返回的指定的值,而不是字符串的值。否则,将返回一个数组,其中存放了它找到的匹配文本有关的信息。使用:indexOf(返回索引号) 先返回该字符串第一次出现的位置,大于1则将字符串进行分割,再使用substring 方法(从匹配的索引位置到最后的位置),也可以使用substr方法,进行递归操作。第二个参数为截取的后面索引。第二个参数为截取的长度。只有一个参数是,都是从截取字符串从当前下标以后知道字符串最后的字符串片段。
2024-08-27 11:52:48
169
原创 前端问题——内存泄漏
到底哪些变量是没有用?从逻辑上讲,永远不能释放进入环境的变量所占用的内存,因为只要执行流进入响应的环境,就可能用到它们。fn()执行完毕后,两个对象都已经离开环境,在标记清除方式下是没有问题的,但是引用计数策略下,因为a和b的引用次数不为0,所以不会被垃圾回收器回收内存,如果fn函数被大量引用,就会造成内存泄漏。JS 的垃圾回收机制:垃圾回收机制很简单那,找出不再使用的变量,然后释放掉其占用的内存,但是这个过程不是实时的,因此其开销比较大,所以垃圾回收系统(GC)会按照固定的时间间隔,周期性的执行。
2024-08-27 10:38:45
659
原创 前端编程题——最小值 牛牛
问题描述:牛牛给度度熊处理一个数学题,牛牛给定数字n,m,k,希望度度熊找到一组非负整数a,b满足(n-a)(m-b)<=k,且a+b尽量小。输出说明,当a=7,b=0 时,满足条件并且a+b最小。输入实例: 12 18 100。
2024-08-27 08:46:28
188
原创 前端编程题——度度熊的工作
问题描述:老板给嘟嘟熊分配了n个工作,第i个工作需要消费a单位的事件,每个工作必须在老板给定的时间限制b之内完成。度度熊从0时刻开始工作,在同一时间度度熊只能做一件工作,度度熊想知道他是否能把所有工作完成?
2024-08-26 23:04:13
147
原创 前端编程题——老板发奖金(JS)
问题描述:老板一共需要给某个员工发奖金n元,可以选择一次发1元,也可以选择一次发2元,也可以选择一次发3元。请问老板给员工发完n元奖金有多少种不同的方法。
2024-08-26 22:33:17
146
原创 CSS盒模型与style.width,offsetWidth,clientWidth的关系?
首先style.width获取DOM元素的CSS样式的style,没有设置CSS样式,则返回runtimeStyle(运行时的样式),而当有设置css.width的时候,返回值与盒模型无关。所以,如果dom元素没有设置内嵌样式,通过dom.style.width获取不到值。clientWidth 返回元素的的宽度(包括元素的宽度、内边距,不包括边框和外边距)offsetWidth 返回元素的宽度(包括元素宽度,内边距和边框,不包括外边距)
2024-08-26 22:24:41
206
原创 JavaScript操作数比较的规则
null和undefined是相等的,要比较相等性之前,不能将null和undefined转换成其他类型的值;如果有一个操作数为NaN,则相等操作符返回false,而不相等操作符返回true。重要提示:即使两个操作数都是NaN,相等操作符返回false;
2024-08-26 22:09:36
212
原创 前端编程题——五八文字碰碰消(JS)
问题描述:输入n为消除的五八对数,五八在一起能够消除,n对五八的排列的顺序使能够消除。输出的实例:‘五八五八’ ‘五五八八’
2024-08-26 21:39:36
185
原创 前端编程题——查找字符串的最长公共前缀(JavaScript)
问题描述:编写查询函数返回数字字符串中的最大公共前缀字符串。输入:flower,flow,flight。
2024-08-26 21:30:42
148
原创 前端编程——合数质因数分解(JavaScript))
问题描述:用JavaScript实现把一个合数用质因数相乘的形式表示出来。输出: 100 = 2。
2024-08-26 20:49:21
144
原创 页面加载过程中触发的事件
当文档或一个子资源将要被卸载时,在beforeunload、pagehide两个事件之后触发。此时文档会处于一个待定的状态:所有资源仍存在;:当浏览器窗口,文档或其资源将要卸载时,会触发。如当前的外部资源较多时,交互阶段可能会早于完成阶段。:当一个资源以及依赖的资源结束加载时触发(只有当一个页面完全加载时才触发),从这里可以看到需要等待资源的结束加载。:当初始HTML文档加载并解析之后触发,无需要等待样式、图片、子框架结束。属性描述了文档的记载状态,在整个加载过程中。会不断变化,每次变化都会触发。
2024-08-26 20:42:41
485
原创 前端编程——删除字符(JavaScript))
例如输入:“They are students.” “aeiuo”输入两个字符串,从第一个字符串中删除第二个字符串的所有字符。输出:“Thy r stdnts”
2024-08-26 19:35:17
188
原创 前端编程题——小红的元素乘积(JAVA)
小红定义一个数为“完美数”当且仅当该数有一个非零数字。例如5000,4,1,200都是完美数。小红拿到的一个大小为n的数组,她希望选择两种元素,满足它们的乘积为完美数。小红想知道,共有多少种不同的取法?
2024-08-26 19:30:45
223
原创 Vue2和Vue3的区别
建立完这个数组随即也就知道哪些节点是客服用的,然后通过这个数组计算最长递增子序列,这个序列的节点位置不懂,然后将新节点数组中的剩余节点移动到正确的位置。在Vue2中,可以在组件中调用组件的生命周期钩子函数,现在Vue3的合成API里面的setup()方法基本上包含了所有的东西,生命周期钩子就是其中之一。{key, oldVnode},然后遍历新节点列表的剩余节点,根据新的虚拟的DOM节点的key 查看它是否可以在表中找到可复用的节点的当时来处理剩余节点,并把这个可复用节点移动到正确的位置。
2024-08-26 19:21:45
358
原创 虚拟DOM和Diff算法
虚拟DOM是对真实DOM的抽象,本质上是JavaScript对象,这个对象就是更加轻量级的对DOM的描述。首先都知道频繁操作变动真实DOM会引起浏览器的重绘和回流,这会大大降低浏览器的性能,而在 前端性能优化的其中有一个方向就是尽可能操作真实DOM,从而达到提升性能的目的。因为紧紧修改虚拟dom中的内容,不会带来页面的重绘和回流操作。在完成虚拟DOM修改后,进行真实DOM的修改,才会使页面重绘。
2024-08-26 16:36:06
449
原创 前端编程——单词
问题描述:小欧有一些英文单词,他想知道这些单词是不是合法的。一个单词是合法的当且仅当这个单词首字母是大写的,其它字母均是小写的。
2024-08-25 22:35:05
129
原创 数组扁平化的方法
实现思路:根据原数组创建一个栈,弹出栈顶val,如果弹出的元素仍是数组,则将数组val中的元素使用扩展运算符依次入栈。不是数组,直接返回。① 首先使用JSON.stringify把数组arr转化为字符串。② 接着使用正则化把字符串里面的 [ 和 ] 去掉。③ 再拼接数组括号转为数组对象。concat不会更改原数组。
2024-08-25 22:14:58
210
原创 Ajax原理
Ajax工作就是在用户和服务器之间加一个中间层,使用户操作与服务器响应异步化。(异步的js和XML是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。建立服务器的调用 ,method:请求的类型;GET 或 POST ,url:文件在服务器上的位置。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。向服务器发送数据 ,content:仅用于 POST 请求。组成:js,css,DOM,XMLHttpRequest对象。readyState 请求响应过程中的状态码。
2024-08-25 21:56:16
252
原创 hash模式和history模式的区别
都是服务器指定的,服务器根据客户端发来的HTTP请求,将返回的数据于模板引擎的结果结合后进行渲染,将渲染完毕的页面发送给客户端。缺点是每次发起请求都要刷新页面,用户体验不够好,服务器压力大。之后,出现了SPA单页面应用,一个Web项目只有一个HTML文件,一旦页面加载完成,SPA不会因为用户的操作进行重新加载或跳转,而是用JS动态变换html的内容(使页面无需重新加载,用户体验更加流程),页面本身的url没有变化,这会导致两个问题:1. SPA无法就记住用户的操作。
2024-08-25 20:45:28
364
原创 解析URL
URL 是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
2024-08-25 17:24:40
219
原创 Promise.race()方法
finally()方法用于指定无论Promise对象的最终状态如何,都将执行finally。Finally不接受参数,finally独立于先前的状态,不依赖于先前的运行结果。不管是成功状态还是失败状态,只输出最快的Promise。工作的原理返回一个Promise,一旦迭代器中的某个Promise履行或拒绝,返回的Promise就会履行或拒绝。
2024-08-25 16:40:19
140
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人