- 博客(24)
- 收藏
- 关注
原创 vue2和vue3的区别
本文对比了Vue 2和Vue 3在核心功能实现上的差异,包括:1) 侦听器(watch)的语法变化;2) 组件通信(provide/inject)的改进;3) 模板引用(ref)的简化;4) 自定义指令的更新;5) 状态管理工具从Vuex迁移到Pinia。重点展示了Vue 3的组合式API写法,以及Pinia在模块化、类型支持和持久化方面的优势,通过购物车和计数器示例演示了现代Vue状态管理的最佳实践。
2025-08-14 14:59:52
167
原创 标识符Symbol和迭代器的实现
本文介绍了JavaScript中Symbol的基础用法和特性。Symbol通过Symbol("描述")创建唯一标识符,Symbol.for()实现全局注册。作为对象属性键时需用[]访问,不会出现在常规遍历中,可用于创建私有属性。
2025-06-03 14:37:59
611
原创 Cookie存储
Cookie是HTTP协议下的客户端存储技术,具有自动携带、容量小等特点,分为会话Cookie和持久化Cookie两种类型。原生Cookie操作复杂,而js-cookie库提供了更简便的API,支持自动序列化、参数化配置和跨浏览器兼容性
2025-06-01 12:54:47
336
原创 location和history对象常见属性和方法
location和history是浏览器重要的全局对象,用于URL操作和历史记录管理。location包含URL解析和跳转功能,提供href、pathname等可读写属性及assign()、replace()等方法。history则控制浏览记录,支持pushState()添加记录和replaceState()替换记录,通过popstate事件监听导航变化。二者配合可构建无刷新页面的路由系统。
2025-05-30 22:37:33
428
原创 自定义属性
自定义属性知识点摘要 HTML属性分为标准属性和自定义属性。标准属性是HTML原生支持的(如id、class),而自定义属性分为两类:1)HTML5规范的data-属性(如data-id),可通过element.dataset访问;2)普通自定义属性(如myAttr),需用getAttribute/setAttribute访问。优先推荐使用data-属性,因其符合规范、语义明确且不易冲突。自定义属性适用于存储组件配置或临时数据,但应避免存储敏感信息。
2025-05-30 18:50:36
862
原创 JavaScript 中 0, null, undefined, ““, NaN 的详解
本文详细对比了JavaScript中5个特殊值:0、null、undefined、""和NaN的核心特性
2025-05-29 18:16:38
1535
原创 JavaScript深浅拷贝
首先浅拷贝和深拷贝只针对引用类型浅拷贝:拷贝的是地址常见方法:拷贝对象:Object.assgin() / 展开运算符 {...obj} 拷贝对象拷贝数组:Array.prototype.concat() 或者 [...arr]如果是简单数据类型拷贝值,引用数据类型拷贝的是地址 (简单理解: 如果是单层对象,没问题,如果有多层就有问题)
2025-05-29 16:56:25
186
原创 JavaScript 中 this 核心概念
场景this指向普通函数调用全局对象(window)或undefined对象方法调用调用方法的对象构造函数调用新创建的实例对象事件处理函数触发事件的 DOM 元素定时器回调全局对象(window箭头函数外层作用域的this建议使用箭头函数前确认是否需要绑定this。在需要动态指定this的场景中优先使用bind。避免在原型方法或事件处理函数中使用箭头函数。通过以上规则和示例,可以系统掌握 JavaScript 中this的行为,并灵活应对不同场景下的this绑定问题。
2025-05-29 14:05:43
1116
原创 JavaScript的宏任务(MacroTask)和微任务(MicroTask)
JavaScript 的事件循环机制中,宏任务(MacroTask)和微任务(MicroTask)决定了异步代码的执行顺序。宏任务由宿主环境发起(如 setTimeout、I/O 操作),每次事件循环执行一个;微任务由 JavaScript 自身发起(如 Promise.then),在当前宏任务结束后立即执行且优先级更高。
2025-05-29 13:49:53
1482
原创 防抖(Debounce)和节流(Throttle)
防抖(Debounce)和节流(Throttle)是前端优化高频事件处理的两种技术。防抖在事件停止触发后执行最后一次操作,适用于搜索联想、表单验证等场景;节流则固定时间间隔执行一次,适合滚动、鼠标移动等持续触发事件。防抖通过清除并重置计时器实现,而节流通过时间戳或定时器控制执行频率。两者都能减少不必要的计算,提升性能,但适用场景不同:防抖关注操作结束后的响应,节流确保稳定间隔执行。合理选择并调整参数可优化用户体验。
2025-05-29 13:13:57
886
原创 深入理解JavaScript中的async/await
JavaScript中的async/await是异步编程的重大改进,它让异步代码拥有同步的书写风格。async函数隐式返回Promise,await则暂停函数执行直到Promise完成,期间主线程继续执行其他任务。本文详细解析了async/await的工作原理、执行时机和Event Loop关系,并通过典型场景比较了与Promise的差异:async/await更适合顺序异步操作和复杂流程,而Promise在简单异步和并行操作上更直接。合理使用async/await能显著提升代码可读性。
2025-05-28 23:12:24
1316
原创 什么是回调地狱,如何解决回调地狱?
摘要: 回调地狱是JavaScript异步编程中因多层嵌套回调导致的代码可读性差、维护困难的问题。其常见于定时器、AJAX等异步任务顺序执行时。解决方案主要有两种:1) Promise通过链式.then()替代嵌套,提供统一错误处理;2) async/await以同步化语法简化异步流程,结合try/catch提升可读性。最佳实践推荐优先使用async/await,需注意其依赖Promise且需在async函数中使用。这两种方法能有效避免回调地狱,增强代码可维护性。
2025-05-28 23:08:58
755
原创 ref, reactive, toRef, toRefs,shallowRef,shallowReactive
refvsshallowRefref对其.value及其内部属性的变更进行响应式追踪,而shallowRef只对.value的变更进行响应式追踪。reactivevsreactive对对象及其内部属性的变更进行响应式追踪,而只对对象本身的变更进行响应式追踪。
2025-05-25 18:10:51
702
原创 Node.js环境配置dotenv
在 Node.js 项目中,dotenv是一个用于管理环境变量的流行工具,它通过.env文件加载配置,使得不同环境的配置管理更加方便和安全。
2025-05-23 18:03:58
933
原创 JavaScript中bind、call、apply
可将数组参数展开为独立参数,适用于参数数量不固定的场景。:当某个对象没有某个方法,但其他对象有时,可以通过。通过以上分析,可根据实际需求选择合适的方法:需。预先设置部分参数,生成一个参数更少的新函数。:在异步回调(如事件监听、定时器)中,使用。或 DOM 节点列表)的数组方法。是用于改变函数执行上下文(即。在 JavaScript 中,,避免因调用方式改变上下文。:操作类数组对象(如。
2025-05-23 09:29:37
453
原创 鼠标事件总结
鼠标事件是前端开发中常用的交互方式,主要包括单击、双击、按下、释放、右键菜单和移动等事件。常见事件如 click、dblclick、mousedown、mouseup、contextmenu、mousemove 等,分别用于处理不同的用户操作。
2025-05-22 20:30:34
750
原创 Express应用程序生成器介绍
Express 应用程序生成器(express-generator)是一个用于快速创建 Express 项目骨架的工具,特别适合需要标准化目录结构和基础配置的开发者。express-generator 显著提升了项目初始化效率,适合快速原型开发和团队协作,但开发者仍需根据需求扩展功能。
2025-05-22 20:20:33
580
原创 十种排序算法(Java)
排序的稳定性指的是在排序过程中,具有相同关键字值的元素是否能够保持原有的相对顺序。简而言之,如果待排序的序列中存在两个相等的元素A和B,且在排序前A出现在B的前面,那么在排序后,A仍然会出现在B的前面,那么这个排序算法就是稳定的排序算法。一些常见的稳定排序算法包括插入排序、归并排序和冒泡排序。而选择排序、快速排序和堆排序通常是不稳定的排序算法,因为它们可能会改变具有相同关键字值的元素之间的相对顺序。因此,在选择排序算法时,如果需要保持相等元素的相对顺序,稳定性是一个需要考虑的因素。
2024-02-05 14:38:36
975
1
原创 集合的应用(Java)
最后,我们打印尾部的姓名。这样,在统计字符出现次数时,我们可以通过 map.getOrDefault(c, 0) 来获取键 c 对应的出现次数,如果键 c 不存在,则返回默认值 0。键值对遍历:使用增强for循环、迭代器或Lambda表达式遍历键值对对象的集合,然后分别获取键和值,并输出键和值。键找值遍历:使用增强for循环、迭代器或Lambda表达式遍历键的集合,然后根据键获取对应的值,并输出键和值。在遍历结束后,我们修改了键值对:添加了一个新的键值对、删除了指定键的键值对,并修改了指定键的值。
2024-02-01 14:44:49
962
1
原创 移除数组中指定元素(Java)
然后我们对数组进行遍历,如果当前元素等于要移除的元素值,就将当前元素替换为数组末尾的元素,然后尾指针 rear 左移一位。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。方法创建一个新数组和列表,以存储保留的元素,并输出更新后的数组长度和内容。输入:nums = [0,1,2,2,3,0,4,2], val = 2。
2024-01-31 23:55:17
3960
2
原创 两数之和(Java)
给定一个整数数组nums和一个整数目标值target,请你在该数组中找出 和为目标值 target的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。[0,1]因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。[1,2][0,1]
2024-01-31 22:07:54
698
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅