![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
前端三剑客使用
初次接触html、css、js
子玉欸
加油,冲冲冲
展开
-
js中什么是作用域、有什么用
2. **变量访问控制**:作用域可以限制变量的访问权限,确保变量只在合适的地方被访问和修改。通过作用域链的机制,内层作用域可以访问外层作用域的变量,而外层作用域无法直接访问内层作用域的变量。4. **闭包的实现**:作用域链的特性使得 JavaScript 可以支持闭包的实现。3. **内存管理**:作用域的存在可以帮助进行内存管理,当变量不再被引用时,其所占用的内存可以被垃圾回收机制自动释放,避免了内存泄漏。1. **变量隔离**:作用域可以将变量进行隔离,避免命名冲突和变量污染。原创 2024-03-16 17:39:31 · 358 阅读 · 0 评论 -
Ajax特点
1. **异步通信**:Ajax 使用异步方式发送请求和接收响应,不会阻塞页面的加载和用户的操作。3. **无需插件**:Ajax 可以直接使用基于浏览器支持的原生 JavaScript 和 XMLHttpRequest 对象来实现,无需额外的插件或扩展。2. **局部更新**:通过使用 Ajax,可以只更新页面的一部分内容,而不需要整个页面的刷新。6. **实时验证和反馈**:Ajax 可以用于实时验证用户输入并提供实时反馈,避免了用户提交表单后再等待服务器响应的延迟。原创 2024-03-16 17:38:50 · 357 阅读 · 0 评论 -
ajax请求中Get和Post请求的区别
总结来说,GET 请求适合用于获取数据,且在请求参数较少、非敏感数据的情况下使用;而 POST 请求适合用于提交数据,特别是对敏感数据的传输。- 以查询字符串的形式将数据附加在 URL 后面,数据会暴露在 URL 中,有长度限制。- 将数据放在请求体中传输,不会暴露在 URL 中,适合传输敏感数据和大量数据。- 不安全,因为参数直接暴露在 URL 上,适合传输非敏感数据。- 可以被缓存,可以被书签保存,可被浏览器历史记录保存。- 安全性较高,适合传输敏感数据,如用户登录信息。原创 2024-03-16 17:38:15 · 358 阅读 · 0 评论 -
li和li之间有空白为什么?如何去除?
1. **换行符**:在 HTML 代码中,如果``元素之间处于不同行,那么换行符会被解释为一个空白字符,从而导致呈现出来的效果中出现空白。在 HTML 代码中,`` 元素之间出现空白的原因通常是由于代码格式化和布局排版所导致的。- 给 `` 或 `` 的父元素设置 `font-size: 0;`,然后重新给 `` 元素设置合适的字体大小。这些方法可以帮助你去除 `` 元素之间的空白,具体选择哪种方法取决于你的需求和实际情况。原创 2024-03-16 17:37:44 · 462 阅读 · 0 评论 -
css的过渡动画的区别
总的来说,CSS 过渡适用于简单的状态变化,而 CSS 关键帧动画更适用于复杂的动画效果,可以更精细地控制动画的每一帧。在实际开发中,根据具体的动画需求,可以选择使用其中的一种或者两种方式来实现页面元素的动画效果。- 使用 `@keyframes` 规则来定义动画序列,指定动画的开始状态、结束状态,以及中间的关键帧。- 使用 `transition` 属性来定义元素的过渡效果,包括过渡持续时间、延迟时间、过渡属性等。- 可以控制动画的每一帧,实现更加复杂和精细的动画效果。原创 2024-03-16 17:36:59 · 314 阅读 · 0 评论 -
如何兼容低版本的IE
要兼容低版本的IE(Internet Explorer),通常需要考虑以下几个方面:1. **CSS Hack**:在编写CSS时,可以使用一些特定的Hack技巧来针对不同版本的IE进行样式调整。比如使用`_property: value;`针对IE6、IE7,使用`*property: value;`针对IE7等。2. **条件注释**:可以通过在HTML文档头部添加条件注释来针对不同版本的IE加载特定的CSS文件或JavaScript文件。例如: 3. **JavaScript兼容性处理**:在原创 2024-03-14 22:46:54 · 326 阅读 · 0 评论 -
css伪类/伪元素
CSS伪元素允许我们创建在文档树中不存在的元素,并在其上应用样式。- :focus - 当元素获得焦点时(例如,通过使用tab键导航)。- ::first-letter - 为文本块的第一个字母应用样式。- :nth-child() - 选择某个父元素下的第n个子元素。- ::first-line - 为文本块的第一行应用样式。- :checked - 用于选择已经被选中的表单元素。- ::before - 在元素之前插入一个虚拟的元素。- ::after - 在元素之后插入一个虚拟的元素。原创 2024-03-14 22:45:35 · 310 阅读 · 0 评论 -
URL输入到页面渲染过程
1. **URL解析**:当用户在浏览器的地址栏中输入一个URL时,浏览器会首先对URL进行解析,包括解析协议(如http、https)、主机名、路径等信息。4. **发起HTTP请求**:一旦建立TCP连接,浏览器会向服务器发送HTTP请求,请求特定资源(如HTML文件、CSS文件、JavaScript文件等)。2. **DNS解析**:如果URL中包含域名,在解析完URL后,浏览器会向DNS服务器发送请求,将域名解析为相应的IP地址,以便建立网络连接。原创 2024-03-14 22:42:12 · 391 阅读 · 0 评论 -
W3C与web标准
W3C是“万维网联盟”(World Wide Web Consortium)的缩写,是一个国际性的组织,致力于制定和推广Web标准。Web标准是指由W3C制定的一系列规范和指南,旨在确保Web内容的可访问性、互操作性和持续发展性。这些标准涵盖了HTML、CSS、XML等技术,并且不断更新和完善,以适应Web技术的发展和变化。通过W3C制定的标准,开发者能够创建符合最佳实践、跨平台兼容的Web应用,用户也能够获得更好的浏览体验。原创 2024-03-14 22:41:24 · 363 阅读 · 0 评论 -
meta标签作用/SEO优化
1:合理的 title、description、keywords:搜索对着三项的权重逐个减小,title 值强调重点即可,重要关键词出现不要超过 2 次,而且要靠前,不同页面 title 要有所不同;3:重要内容 HTML 代码放在最前:搜索引擎抓取 HTML 顺序是从上到下,有的搜索引擎对抓取长度有限制,保证重要内容一定会被抓取。2:语义化的 HTML 代码,符合 W3C 规范:语义化代码让搜索引擎容易理解网页。5:少用 iframe:搜索引擎不会抓取 iframe 中的内容。1:搜索引擎优化(SEO)原创 2024-03-14 22:36:23 · 424 阅读 · 0 评论 -
css动画与js动画的区别
CSS 动画:使用 CSS 样式属性(如`transition`、`animation`)来定义动画效果,不需要编写复杂的 JavaScript 代码。- JavaScript 动画的性能取决于浏览器的 JavaScript 引擎以及动画的复杂程度,可能会导致较大的性能开销。- JavaScript 动画更加灵活,可以实现更复杂、个性化的动画效果,可以根据事件、条件等动态控制动画的行为。- JavaScript 动画:通过 JavaScript 脚本控制 DOM 元素的属性值的变化来实现动画效果。原创 2024-03-13 21:09:38 · 341 阅读 · 0 评论 -
JavaScript的拖拽api的使用
5. `drop`:在拖动元素释放时触发,表示将元素放置到目标区域内。同样需要在此事件中调用 `e.preventDefault()` 阻止浏览器默认行为,并且可以通过 `e.dataTransfer.getData()` 方法获取传递的数据。4. `dragover`:在允许拖放的区域内持续触发,表示拖动元素在目标上方拖动。要使元素可放置,必须在此事件中调用 `e.preventDefault()` 阻止浏览器默认行为。2. `drag`:在拖动元素过程中连续触发。事件中获取拖拽的数据并进行相应处理。原创 2024-03-13 21:01:36 · 351 阅读 · 0 评论 -
JS如何获取网页的宽高
这些方法将返回视口(viewport)的宽度和高度,即可见区域的宽度和高度,不包括滚动条和其他浏览器窗口装饰的部分。要获取网页的宽度和高度,可以使用 JavaScript 来动态获取。这些代码将返回整个文档的宽度和高度,包括滚动条和隐藏部分。希望这些信息能够帮助到你。如有其他问题,欢迎随时向我提问。原创 2024-03-12 22:27:40 · 1167 阅读 · 0 评论 -
js中怎样添加、移出、插入、复制、创建
复制节点:cloneNode(true);// 参数为true表示复制节点的所有子节点,为false表示只复制节点本身。创建节点:createElement()添加节点:appendChild();插入节点:insertBefore()移除节点:removeChild()原创 2024-03-12 20:20:46 · 391 阅读 · 0 评论 -
什么是模板字符串?
${name}`和`${age}`分别代表着变量`name`和`age`的值,最终输出的字符串为:"My name is Alice and I'm 25 years old."。它允许我们在字符串中插入变量、表达式和函数调用,并以更简洁和可读的方式构建复杂的字符串。在大多数编程语言中,通常使用字符串拼接的方式来构建复杂的字符串,这往往会导致代码冗长和难以维护。而使用模板字符串,我们可以直接在字符串中使用占位符(${expression})来引用变量或表达式的值,而不需要进行额外的拼接操作。原创 2024-01-20 21:46:42 · 504 阅读 · 0 评论 -
解构赋值及其原理?
当执行解构赋值时,JavaScript 引擎会根据模式匹配提取相应的值,并将它们赋给对应的变量。在解构赋值的过程中,我们需要通过匹配模式来指定要提取的值,并将它们赋给对应的变量。这里的模式通常是一个数组或对象,其中每个元素都是一个定义了变量名的占位符,用于表示要提取的值的位置和对应的变量名。需要注意的是,尽管解构赋值可以使代码更加简洁和易于理解,但它也可能会降低代码的可读性,特别是在嵌套解构赋值的情况下。解构赋值是一种在编程语言中,从数组或对象等数据结构中提取值,并将其赋给变量的方法。原创 2024-01-20 21:46:11 · 317 阅读 · 0 评论 -
什么是扩展运算符?有什么使用场景?
扩展运算符(Spread Operator)是一种在编程语言中,将一个可迭代对象(如数组、字符串等)展开为另一个可迭代对象的语法。因此,我们应该谨慎使用扩展运算符,并在需要时考虑使用其他方式来解决问题。在上述示例中,我们使用扩展运算符将数组`arr1`中的元素展开到新数组`arr2`中,并添加了额外的元素。在上述示例中,我们使用扩展运算符将对象`obj1`中的属性展开到新对象`obj2`中,并添加了额外的属性。在上述示例中,我们使用扩展运算符将数组`nums`展开成参数列表,传递给函数`sum`进行计算。原创 2024-01-20 21:45:35 · 445 阅读 · 0 评论 -
JS的垃圾回收机制是什么?怎么用?有什么好处?
JavaScript的垃圾回收机制是一种自动内存管理机制,它负责检测和回收不再被引用的对象,并释放这些对象所占用的内存空间。总结来说,JavaScript的垃圾回收机制能够自动管理内存,避免内存泄漏问题,提高应用的性能和稳定性,为开发者提供了更简单和可靠的内存管理方式。2. 清除(Sweeping):在标记完成后,垃圾回收器会扫描整个堆内存,将未被标记的对象判定为垃圾对象,然后释放这些垃圾对象所占用的内存空间。2. 避免内存泄漏:垃圾回收机制可以检测不再使用的对象,并释放它们占用的内存。原创 2024-01-12 11:14:14 · 367 阅读 · 0 评论 -
css中的bfc是什么?如何会触发
7. 匿名表格单元格元素(display 属性为 table、table-row、table-row-group、table-header-group、table-footer-group 之一)。当一个元素触发 BFC 后,它会按照 BFC 的规则来进行布局,与其他元素相互影响时会有特定的行为,例如阻止浮动元素重叠、清除浮动、自适应父元素等。BFC中的元素垂直排列,一个块级元素紧跟在另一个块级元素的下方。BFC中的浮动元素会被包含在BFC中,不会影响到外部元素的布局。BFC中的元素不会与浮动元素重叠。原创 2024-01-12 11:12:00 · 502 阅读 · 0 评论 -
async 与 awite
当我们使用 await 等待一个 Promise 对象时,JavaScript 引擎会暂停当前函数的执行,直到 Promise 对象执行完毕并返回结果才会继续执行下面的代码。async 函数是一个返回 Promise 对象的函数,它在函数体内部使用 await 来等待 Promise 对象执行结果。这个函数使用 async 关键字声明,返回一个 Promise 对象,在函数体内部使用 await 等待异步操作完成,然后将得到的数据返回。原创 2024-01-11 19:08:07 · 369 阅读 · 0 评论 -
js获取当前时间,并实时更新
这段代码会将当前时间格式化为 `xx:xx:xx` 的形式,并将其显示在id为 `time` 的元素中。同时,每秒钟会调用 `updateTime` 函数来更新时间。可以使用JavaScript的`Date()`对象来获取当前时间,并使用`setInterval()`函数实现实时更新。原创 2023-12-24 08:08:14 · 1385 阅读 · 0 评论 -
如何删除对象中的属性?如何想对象中添加属性?
在上面的例子中,我们使用点号(`.`)语法和方括号(`[]`)语法向 `obj` 对象中添加了 `age` 和 `occupation` 属性。需要注意的是,上述方法都会直接修改原始对象。如果想要创建一个新的对象并添加或删除属性,可以使用对象展开运算符(`...`)或对象解构赋值来实现。在上面的例子中,使用 `delete` 关键字删除了 `obj` 对象中的 `age` 属性。希望以上信息能对你有所帮助!如果你还有其他问题,请随时提问。**1. 删除对象中的属性:****2. 向对象中添加属性:**原创 2023-11-19 23:51:50 · 243 阅读 · 0 评论 -
ajax框架格式,每个属性的作用是什么
`onreadystatechange`: 一个事件处理函数,当`xhr`对象的`readyState`属性发生变化时被调用,用于处理服务器响应。- `readyState`: 表示请求的状态,0-未初始化,1-启动,2-发送,3-接收,4-完成。- `open()`: 设置请求的方法(如GET、POST)和URL,以及是否采用异步方式发起请求。- `xhr`: XMLHttpRequest 对象,用于发起HTTP请求并接收服务器的响应。- `responseText`: 服务器返回的响应数据。原创 2023-11-14 21:48:10 · 28 阅读 · 0 评论 -
js如何修改对象中的属性名
以上这些方法都可以用来修改对象中的属性名,开发者可以根据实际需求选择适合的方式进行操作。注意,修改属性名时需要先创建新属性或赋值给新的属性,然后再删除旧属性。原创 2023-11-14 21:44:44 · 2457 阅读 · 0 评论 -
多个页面之间如何进行数据传递
如果你需要在页面之间传递较多的数据,可以使用表单提交。用户在第一个页面填写表单,然后提交表单到服务器,在服务器端处理完数据后,再返回到第二个页面。如果你的网站是一个单页面应用,你可以使用JavaScript全局变量来在不同的页面之间传递数据。这意味着你可以在一个页面中设置一个全局变量,然后在另一个页面中读取它。例如,在页面跳转时可以将数据添加到URL的查询字符串中,然后在目标页面读取这些参数。你可以使用GET或POST请求,在请求中包含需要传递的数据,然后在目标页面中处理这些数据。原创 2023-11-12 09:55:29 · 732 阅读 · 0 评论 -
js中new关键字的作用
4. **返回新对象**:如果构造函数内部没有显式地返回一个对象,那么 `new` 操作符会隐式地返回这个新对象;2. **将构造函数的作用域赋给新对象**:在创建新对象后,JavaScript 会将新对象的 `this` 指向这个新创建的对象,以便在构造函数内部引用该对象。1. **创建一个新对象**:当使用 `new` 关键字调用构造函数时,会创建一个新的空对象。- 将新对象的 `this` 指向这个空对象,使得构造函数内部可以操作这个新对象。- 返回这个新对象,赋值给变量 `person1`。原创 2023-11-10 21:17:53 · 109 阅读 · 0 评论 -
js中this是指向的哪个全局变量,改变this指向的方法有什么
这些是改变 `this` 指向的常见方式。2. **显式绑定**:通过 `call`、`apply` 或 `bind` 方法,可以显式地指定函数内部 `this` 的指向。3. **构造函数中的 `this`**:当使用 `new` 关键字调用构造函数时,`this` 会指向新创建的实例对象。4. **箭头函数**:箭头函数没有自己的 `this`,它会捕获其所在上下文的 `this` 值。1. **隐式绑定**:当一个函数作为对象的方法被调用时,`this` 会指向该对象。原创 2023-11-10 20:35:26 · 35 阅读 · 0 评论 -
什么是cookie,如何设置在浏览器页面关闭后清除cookie
要在浏览器关闭后清除Cookie,可以通过设置Cookie的过期时间来实现。通常情况下,如果不设置Cookie的过期时间,它将成为会话Cookie,只在浏览器打开期间有效,一旦关闭浏览器,这些Cookie就会被删除。常用于记录用户的偏好设置、购物车内容、登录状态等。网站可以在用户访问时将Cookie存储在用户计算机上,然后在后续访问时从中读取信息。无论采用哪种方式,设置了过期时间的Cookie在浏览器关闭后都会被立即清除。需要注意的是,删除Cookie的操作也需要与设置Cookie时相同的路径和域名。原创 2023-11-09 21:22:38 · 2943 阅读 · 0 评论 -
使用promise解决异步请求的用法
上述代码中,`fetchData` 函数返回一个Promise对象,在其中执行了模拟的异步操作。当操作成功时,调用 `resolve` 并传递数据,当操作失败时,调用 `reject` 并传递错误信息。在调用 `fetchData` 后,`.then` 方法用于处理异步操作成功的情况,`.catch` 方法用于处理异步操作失败的情况。通过使用Promise,我们可以更加灵活地处理异步操作的结果,并且可以链式调用多个异步操作,以便清晰地表达异步操作之间的依赖关系。原创 2023-11-09 19:24:11 · 74 阅读 · 0 评论 -
js中的事件监听函数是什么
在这个示例中,我们首先获取id为'myButton'的按钮元素,然后定义了一个名为handleClick的事件监听函数。接着,通过addEventListener方法向按钮元素添加了一个点击事件的监听器,当按钮被点击时,会调用handleClick函数,并在控制台输出'按钮被点击了!通过事件监听函数,我们可以在特定的事件发生时执行预先定义好的操作或代码,例如响应用户的点击、鼠标移动、键盘输入等交互行为。这样,当用户点击按钮时,就会触发handleClick函数,实现了对按钮点击事件的响应。原创 2023-11-08 20:30:45 · 60 阅读 · 0 评论 -
js中多个页面之间如何进行通信?有什么区别?
使用PostMessage API:如果你的页面是通过iframe嵌套在另一个页面中,或者是由同一域名下的不同页面组成,你可以使用PostMessage API来进行跨页面通信。通过服务器进行通信:如果需要在不同页面之间进行实时通信或共享数据,可以通过服务器端建立一个后端服务,并让不同页面通过WebSocket或AJAX等技术与后端进行通信,从而实现页面之间的数据交换。- 优点:可以在同一浏览器的不同页面之间共享数据,支持存储较大量的数据,并且相对安全。原创 2023-11-08 20:23:21 · 351 阅读 · 0 评论 -
js延迟加载的方式有哪些
3. 使用 Intersection Observer API:Intersection Observer API 可以观察元素是否进入视口,并在满足条件时执行相关代码或加载资源。4. 使用异步加载脚本:可以通过创建 `` 标签并将 `async` 或 `defer` 属性设置为 true,来实现异步加载脚本。5. 使用动态创建的 `` 元素:可以通过创建新的 `` 元素,并将 `src` 属性设置为要加载的图片路径,来实现延迟加载。当图片加载完成后,可以执行相关代码。原创 2023-11-02 19:08:46 · 537 阅读 · 0 评论 -
js中session、cookie、 localStorage和SessionStorage的区别和特点
localStorage 和 sessionStorage 则适用于需要在客户端持久化存储大量数据的情况,但它们仅在客户端存储,不涉及与服务器的数据交互。- Session、cookie、localStorage 和 sessionStorage 都是在浏览器中存储的,因此可以通过 JavaScript 在客户端访问和操作这些存储机制。在 JavaScript 中,session、cookie、localStorage 和 sessionStorage 是用于在客户端存储数据的不同机制。原创 2023-11-01 21:18:59 · 658 阅读 · 0 评论 -
什么是事件冒泡?如何阻止事件冒泡和浏览器默认事件?
事件冒泡是指当一个元素触发了某个事件,该事件会从被触发的元素开始逐层向上冒泡到父元素,直到达到文档树的根节点。也就是说,事件会先在最内层的元素上触发,然后逐级向外传递,依次触发每个父级元素的相同事件。要阻止事件冒泡,可以使用事件对象的`stopPropagation()`方法。有时候,事件冒泡和默认事件行为是有用的,可以提供更好的用户体验和交互效果。需要注意的是,`stopPropagation()`和`preventDefault()`方法都需要在事件处理程序中使用,并且在它们之前对事件进行操作。原创 2023-11-01 21:17:06 · 284 阅读 · 0 评论 -
js中new关键字的作用,new一个对象的过程中发生了什么
在上述示例中,`Person` 是一个构造函数,通过 `new` 关键字创建了一个 `Person` 的实例对象 `john`。` 设置了新对象的属性。3. 执行构造函数的代码:将构造函数作为普通函数调用,将新对象作为构造函数的上下文(即 `this`)传递给构造函数。2. 将构造函数的作用域赋给新对象:将新创建的对象的原型链接到构造函数的 `prototype` 属性上,以实现继承。需要注意的是,如果构造函数显式返回一个对象,则 `new` 关键字创建的对象实例将是返回的对象,而不是新创建的空对象。原创 2023-10-31 23:44:51 · 219 阅读 · 0 评论 -
js中call 和 apply的区别
在上面的例子中,`apply()` 方法将 `person` 对象作为 `sayHello()` 函数的执行环境,并将包含 `'Welcome'` 和 `'!在上面的例子中,`call()` 方法将 `person` 对象作为 `sayHello()` 函数的执行环境,并将字符串 `'Welcome'` 作为参数传递给函数。在上面的例子中,`sayHello()` 函数没有定义任何参数,但是可以通过 `apply()` 方法将 `person` 对象作为执行环境,并且不需要传递任何参数。原创 2023-10-31 23:42:28 · 33 阅读 · 0 评论 -
canvas如何自定义绘制图片
然后,在`Image`对象的`onload`事件中,获取了Canvas元素和其上下文对象,并使用`drawImage()`方法将图片绘制到Canvas上。其中,第一个参数是图片对象,第二和第三个参数分别是图片在Canvas中的坐标,第四和第五个参数分别是图片在Canvas中的宽度和高度。然后,在`Image`对象的`onload`事件中,可以将图片绘制到Canvas上。1. 图片对象:可以是``、``或``元素。2. 图片左上角在Canvas中的X坐标。原创 2023-10-30 21:48:36 · 128 阅读 · 0 评论 -
什么是函数?函数分为几种,如何声明?区别是什么?
这两种函数类型的区别在于函数声明会被提升到当前作用域的顶部,而函数表达式则不会。因此,在函数声明之前调用该函数是有效的,但在函数表达式之前调用该函数会导致错误。- 生成器函数返回一个迭代器对象,可以使用 `next()` 方法逐个获取生成的值。- 箭头函数没有自己的 `this`,它们继承了父级作用域的 `this` 值。- 函数内部包含 `yield` 关键字,可以在执行过程中暂停并返回一个值。在 JavaScript 中,函数分为两种主要类型:函数声明和函数表达式。原创 2023-10-30 21:46:15 · 98 阅读 · 0 评论 -
js中将数字数组进行排序的方法
如果比较函数返回负值,则 `a` 在 `b` 之前;如果返回正值,则 `b` 在 `a` 之前;- 默认情况下,它将按照字符串的 Unicode 编码进行排序,因此需要提供一个比较函数来指定排序规则。- 箭头函数省略了 `function` 关键字和 `return` 关键字,直接写出比较表达式。- 比较函数接受两个参数,通常被称为 `a` 和 `b`,表示数组中的两个元素。- 比较函数可以使用对象的某个属性进行排序,或者使用其他自定义逻辑。- 可以编写自定义的比较函数,以实现更复杂的排序规则。原创 2023-10-29 10:48:58 · 232 阅读 · 0 评论 -
判断一个字符串中出现次数最多的字符,统计这个次数
在上述示例中,输入字符串为 `'abcaabbcc'`,输出结果将是字符 `'a'` 出现的次数最多,出现了 3 次。- 如果 `charCount` 中不存在该字符的属性,则将该字符作为属性添加到 `charCount` 中,并设置初始计数为 1。3. 遍历完所有字符后,找到 `charCount` 中出现次数最多的字符和对应的次数。- 如果 `charCount` 中已存在该字符的属性,则将该字符的计数加 1。1. 创建一个空对象 `charCount`,用于记录每个字符的出现次数。原创 2023-10-29 10:45:54 · 686 阅读 · 0 评论