【JavaScript】四个常用功能/案例:表格排序 | 替换链接 | 倒计时 | 双色球机选一注

news2024/11/17 9:36:31

CSDN话题挑战赛第2期
参赛话题:学习笔记

🖥️ NodeJS专栏:Node.js从入门到精通
🖥️ 博主的前端之路(源创征文一等奖作品):前端之行,任重道远(来自大三学长的万字自述)
🖥️ TypeScript知识总结:TypeScript从入门到精通(十万字超详细知识点总结)
🧑‍💼 个人简介:大三学生,一个不甘平庸的平凡人🍬
👉 你的一键三连是我更新的最大动力❤️!
🏆分享博主自用牛客网🏆:一个非常全面的面试刷题求职网站,点击跳转🍬


文章目录

  • 前言
  • 一、表格排序
  • 二、替换链接
  • 三、倒计时
  • 四、双色球机选一注
  • 结语

前言

最近博主一直在牛客网刷题巩固基础知识,牛客网不仅具有公司真题专项练习面试题库在线编程等功能,还具有非常强大的AI模拟面试功能,简直是求职者的福音!

牛客网里的题库非常全面的,无论你是前端还是后端,是想要备考还是准备面试又或者是想要提高自己,你都能在牛客网上找到适合自己的题,赶快点击链接去注册登录吧:点我进入牛客网

牛客网牛客网
在这里插入图片描述在这里插入图片描述

本篇文章所有示例来自于牛客网题库/在线编程/JS篇,这些都是前端开发中常用的功能,借此记录一下刷题过程,巩固基础!

一、表格排序

描述:

系统会在tbody中随机生成一份产品信息表单,如html所示。

请完成 sort 函数,根据参数的要求对表单所有行进行重新排序。

1、typeidprice或者sales,分别对应第1 ~ 3列
2、orderasc或者descasc表示升序,desc为降序
3、例如 sort('price', 'asc') 表示按照price列从低到高排序
4、所有表格内容均为数字,每一列数字均不会重复
5、不要使用第三方插件

方案:

HTML:

<table>
   <thead>
       <tr>
           <th>id</th>
           <th>price</th>
           <th>sales</th>
       </tr>
   </thead>
   <tbody id="jsList">
       <tr>
           <td>1</td>
           <td>10.0</td>
           <td>800</td>
       </tr>
       <tr>
           <td>2</td>
           <td>30.0</td>
           <td>600</td>
       </tr>
       <tr>
           <td>3</td>
           <td>20.5</td>
           <td>700</td>
       </tr>
       <tr>
           <td>4</td>
           <td>40.5</td>
           <td>500</td>
       </tr>
       <tr>
           <td>5</td>
           <td>60.5</td>
           <td>300</td>
       </tr>
       <tr>
           <td>6</td>
           <td>50.0</td>
           <td>400</td>
       </tr>
       <tr>
           <td>7</td>
           <td>70.0</td>
           <td>200</td>
       </tr>
       <tr>
           <td>8</td>
           <td>80.5</td>
           <td>100</td>
       </tr>
   </tbody>
</table>
<!-- 测试 -->
<button onclick="sort('price', 'asc')">测试</button>

CSS:

body,
html {
    padding: 0;
    margin: 0;
    font-size: 14px;
    color: #000000;
}

table {
    border-collapse: collapse;
    width: 100%;
    table-layout: fixed;
}

thead {
    background: #3d444c;
    color: #ffffff;
}

td,
th {
    border: 1px solid #e1e1e1;
    padding: 0;
    height: 30px;
    line-height: 30px;
    text-align: center;
}
function sort(type, order) {
   let tb = document.getElementById("jsList");
   // console.log(tb.children);
   // tb.children是HTMLCollection类型的伪数组,不算真正意义上的数组,不能直接使用Array原型上的sort方法
   // 所以这里通过Array.prototype.slice.call将tb.children转换成一个真正的数组
   const arr = Array.prototype.slice.call(tb.children)
   // 也可以使用以下方法
   // const arr = Array.from(tb.children)
   // const arr = [...tb.children]

   // 排序
   arr.sort((a, b) => {
       // asc升序,desc降序
       if (order === 'asc') {
           return parseFloat(a.children[thIndex[type]].innerHTML) - parseFloat(b.children[thIndex[type]].innerHTML)
       } else if (order === "desc") {
           return parseFloat(b.children[thIndex[type]].innerHTML) - parseFloat(a.children[thIndex[type]].innerHTML)
       }


   })
   arr.forEach((item) => {
       tb.appendChild(item)
   })
}

// 配置type字段与在tr中的索引的映射关系
const thIndex = {
   id: 0,
   price: 1,
   sales: 2
}

这里使用Array.prototype.slice.call将伪数组转换为真正的数组的原理是:调用Array原型上的slice方法时通过call方法将this指向更改为指向原来的伪数组,这样的效果就相当于是在伪数组上使用slice(伪数组本身不能直接使用slice方法),slice方法用于切割原数组,而当slice方法不传任何参数时就相当于是从原数组开头切割到末尾(相当于原数组的浅拷贝,不会改变原数组)

知识点:

  • slice(a,b) 方法用于切割数组,从下标a开始到下标b(包含下标a的元素,不包含下标b的元素),该方法不会改变原数组,只会返回一个浅复制了原数组中的元素的一个新数组。
  • call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。
  • sort() 方法对数组的元素进行排序,并返回数组。

二、替换链接

描述:

页面中存在id=jsContainerDOM元素。

DOM元素内会给出一段随机文本,可能包含一些链接,比如https://www.baidu.com,或者 www.baidu.com?from=onlineExam,如果出现链接文本,请给该链接文本加上链接标签,用户点击后能直接在新窗口中打开该链接。

完成 link 函数,完成该功能

1、container只有纯文本内容,不包含其他dom元素
2、识别所有以http://https://或者www.开始的链接
3、所有www.开头的链接,默认使用 http 协议
4、所有链接在新窗口打开

方案:

HTML:

<div id="jsContainer">
     这里会给出一段随机文本,可能包含一些链接,比如http://www.baidu.com,或者
     www.baidu.com?from=onlineExam,如果出现链接文本,请给该链接文本加上链接标签,用户点击后能直接在新窗口中打开该链接。
 </div>
 <button onclick="link()">测试</button>

CSS:

a {
    color: #00bc9b;
}

JavaScript:

function link() {
   const elm = document.querySelector('#jsContainer');
   
   let reg = /(https?:\/\/)?(www\.\w+(\.(com|cn))*(\?\w+=\w*(&\w+=\w*)*)?(#\w+)?)/g
   
   elm.innerHTML = elm.innerHTML.replace(reg, function (...args) {
       // args[1]表示的是正则第一个括号内匹配的内容,即https?:\/\/匹配到的内容
       if (args[1]) {
           // args[2]表示正则第二个括号内匹配的内容,即www\.\w+(\.(com|cn))*(\?\w+=\w*(&\w+=\w*)*)?(#\w+)?匹配到的内容
           // args[0]代表正则匹配到的字串
           return `<a target="_blank" href="${args[1]}${args[2]}">${args[0]}</a>`;
       } else {
           console.log(args);
           return `<a target="_blank" href="http://${args[2]}">${args[0]}</a>`;
       }
   })
}

正则解析:

/(https?:\/\/)?(www\.\w+(\.(com|cn))*(\?\w+=\w*(&\w+=\w*)*)?(#\w+)?)/g

  • ?代表前面的字符可选,https?能匹配到httphttps?前有括号包裹则代表括号内的内容可选,如(https?:\/\/)?表示https?:\/\/是可选的。
  • 如果想匹配特殊字符,如/.?等,需要在前面加\对其进行转义,即使用:\/\.\?
  • \w 是字符组[0-9a-zA-Z_]的简写形式,即\w是字母数字或者下划线的中任何一个字符。
  • + 等价于{1,},表示出现至少一次。*等价于{0,},表示出现任意次,有可能不出现。
  • 末尾的g代表全局匹配。

这里主要使用的是字符串的replace方法,这个方法很强大,之后博主会出文章对其进行详细讲解,这里先简单说一下:

replace方法第一个参数能接收一个正则表达式;第二个参数能接受一个方法,该方法的返回值会作为替换字符串替换匹配到的内容,并且如果第一个参数的正则表达式为全局匹配模式(加g),则该方法将被多次调用,每次匹配都会被调用。

着重要说的就是replace第二个参数的这个方法,该方法会有以下参数:

在这里插入图片描述

这时再看上面js代码中的args[1]args[0]应该就能理解了。

三、倒计时

描述:

倒计时是web开发中常见的组件,完成secondrender两个函数,完成倒计时的显示部分
1、second函数的输入为整数(时间间隔秒数),返回{day: Int, hour: Int, min: Int, second: Int}
2、render函数的输入为second函数的输出,将数据在页面对应的DOM元素上显示出来,格式如html所示
3、如果day为0,隐藏对应的DOM元素,否则显示(请直接使用已经实现的css代码)
4、数值不足两位,前面补充0

方案:

HTML:

<div id="jsCountdown">
    <span>01天</span>
    <span>02:</span>
    <span>03:</span>
    <span>04</span>
</div>

CSS:

.hide {
    display: none;
}

JavaScript:

function second(second) {
   // 总的分钟
   let min = parseInt(second / 60)
   // 总的小时
   let hour = parseInt(min / 60)
   // 总的天数
   let day = parseInt(hour / 24)
   // 取余,获得转换后的秒数
   second = second % 60
   // 取余,获得转换后的分钟
   min = min % 60
   // 取余,获得转换后的小时
   hour = hour % 24
   
   return {
       day,
       hour,
       min,
       second
   }
}

function render(data) {
   const d = document.getElementById("jsCountdown").getElementsByTagName('span')
   if (data.day == 0) {
       d[0].className = 'hide'
   } else {
       d[0].innerHTML = `${data.day < 10 ? ('0' + data.day) : data.day}`
   }
   d[1].innerHTML = `${data.hour < 10 ? ('0' + data.hour) : data.hour}:`
   d[2].innerHTML = `${data.min < 10 ? ('0' + data.min) : data.min}:`
   d[3].innerHTML = `${data.second < 10 ? ('0' + data.second) : data.second}`
}
// 测试
render(second(100000))

second方法中我们也可以直接使用Date对象来进行转换获取日、小时、分钟和秒数,但都必须使用UTC的方法:

function second(second) {
   // second * 1000 获取毫秒数
   // data为从 1970 年 1 月 1 日 0 时 0 分 0 秒(UTC,即协调世界时)走过second * 1000毫秒后的日期
   const data = new Date(second * 1000)
   return {
   	   // 需要使用UTC的方法 
       day: data.getUTCDate() - 1,
       hour: data.getUTCHours(),
       min: data.getUTCMinutes(),
       second: data.getUTCSeconds()
   }
}

带有UTC的方法表示的是以协调世界时(全球标准时间UTC)为标准,不带UTC的方法是以本地时间为标准

上面的day在获取时需要减1(data.getUTCDate() - 1)是因为当输入的倒计时秒数不够一天的秒数时,getUTCDate()返回的是1(getUTCDate()返回一个指定的 Date 对象为一个月中的哪一日(1-31))。

四、双色球机选一注

描述:

双色球由33个红球和16个蓝球组成,1注双色球包括6个不重复的红球和1个蓝球。

实现 randomFn 函数,实现“随机一注”功能,要求如下:

函数返回:

  1. 以字符串形式输出“随机一注”结果,选中的红蓝球用"|“隔开,红球在前,号码间用半角逗号隔开,如"06,10,13,18,23,27|05
  2. 红球和蓝球号码排列顺序 需与页面展示的顺序对应

页面交互:

  1. 将选中的红球和蓝球(页面中对应DOM元素)用class="active"高亮
  2. 将选中的球按号码从小到大排列,移至所属组的前方,结果如示意图所示
  3. 每次执行 randomFn 函数,输出符合要求且不完全重复

在这里插入图片描述

注意:

1、使用原生JavaScript操作DOM元素,不要增加、删除DOM元素或修改css
2、使用ES5语法
3、不要使用第三方插件
4、运行浏览器为chrome浏览器

方案:

HTML:

<div class="main">
    <div class="balls red">
        <span>红球</span>
        <div class="balls-wp">
            <b>01</b>
            <b>02</b>
            <b>03</b>
            <b>04</b>
            <b>05</b>
            <b>06</b>
            <b>07</b>
            <b>08</b>
            <b>09</b>
            <b>10</b>
            <b>11</b>
            <b>12</b>
            <b>13</b>
            <b>14</b>
            <b>15</b>
            <b>16</b>
            <b>17</b>
            <b>18</b>
            <b>19</b>
            <b>20</b>
            <b>21</b>
            <b>22</b>
            <b>23</b>
            <b>24</b>
            <b>25</b>
            <b>26</b>
            <b>27</b>
            <b>28</b>
            <b>29</b>
            <b>30</b>
            <b>31</b>
            <b>32</b>
            <b>33</b>
        </div>
    </div>
    <div class="balls blue">
        <span>蓝球</span>
        <div class="balls-wp">
            <b>01</b>
            <b>02</b>
            <b>03</b>
            <b>04</b>
            <b>05</b>
            <b>06</b>
            <b>07</b>
            <b>08</b>
            <b>09</b>
            <b>10</b>
            <b>11</b>
            <b>12</b>
            <b>13</b>
            <b>14</b>
            <b>15</b>
            <b>16</b>
        </div>
    </div>
</div>

CSS:

.main .balls {
    width: 450px;
    padding: 30px 10px 10px;
    margin-bottom: 20px;
    position: relative;
    border-radius: 4px;
}

.main .balls:after {
    content: '\20';
    clear: both;
    display: block;
    height: 0;
    overflow: hidden;
}

.main .balls span {
    position: absolute;
    left: 12px;
    top: 5px;
    font-size: 13px;
}

.main b {
    float: left;
    width: 30px;
    height: 30px;
    font-size: 15px;
    background: #FFF;
    border: 1px solid;
    border-radius: 50%;
    line-height: 30px;
    text-align: center;
    margin-right: 8px;
    margin-bottom: 8px;
    cursor: pointer;
}

.main .red .active {
    background: #f56c6c;
    color: #FFF;
}

.main .blue .active {
    background: #3a8ee6;
    color: #FFF;
}

.main .red {
    background: #feeff0;
}

.main .red b {
    border-color: #f56c6c;
}

.main .blue {
    background: #ecf8ff;
}

.main .blue b {
    border-color: #3a8ee6;
}

JavaScript:

console.log(randomFn());;

function randomFn() {
   return selectBall('red', 6) + '|' + selectBall('blue', 1);
}

// 定义一个复用函数
function selectBall(color, num) {
   var wrap = document.querySelector('.' + color + ' .balls-wp');
   var balls = wrap.getElementsByTagName('b');

   // 存放随机获取到的元素
   var choosed = [];

   for (var i = 0; i < num; i++) {
       // 随机获取元素下标
       var index = Math.floor(Math.random() * balls.length);
       choosed.push(balls[index]);
       // 添加类名
       balls[index].classList.add('active');
       // 将该元素在父容器中删除,避免下次随机获取元素时还获取到该元素(避免重复)
       balls[index].remove();
   }

   // 排序:升序
   choosed.sort(function (a, b) {
       // innerText在2016 年才正式进入 HTML 标准,在一些编译器中使用它会导致编译不通过
       // 可以使用innerHTML或textContent
       return a.innerHTML - b.innerHTML;
   });

   // 注意这里的循环要到着来,因为后插入的会在新插入的前面
   for (var i = num - 1; i >= 0; i--) {
       // 将choosed[i]插入到wrap中balls[0]的前面,这时choosed[i]将成为新的balls[0]
       wrap.insertBefore(choosed[i], balls[0]);
   }

   return choosed.map(function (val) {
       return val.innerHTML;
   }).join(',');
}

知识点:

  • Math 是一个内置对象,它拥有一些数学常数属性和数学函数方法(Math 不是一个函数对象)。这里用到的Math.floor返回小于一个数的最大整数,即一个数向下取整后的值;Math.random返回一个 0 到 1 之间的伪随机数。

  • Element.remove() 方法,把对象从它所属的 DOM 树中删除。

  • Node.insertBefore() 方法在参考节点之前插入一个拥有指定父节点的子节点。
    语法:

    var insertedNode = parentNode.insertBefore(newNode, referenceNode);
    
    • insertedNode :被插入节点 (newNode)
    • parentNode :新插入节点的父节点
    • newNode :用于插入的节点
    • referenceNodenewNode 将要插在这个节点之前

    如果 referenceNodenullnewNode 将被插入到子节点的末尾。

  • 数组的sort方法用来排序,map方法能用来映射,join方法能用来将数组转换成字符串。

结语

这篇文章的所有内容都出自于牛客网的JS篇题库:
在这里插入图片描述

牛客网的JS题库非常贴合实际的,在写的过程中自己查漏补缺,收获了很多,强烈将牛客网推荐给大家!

如果本篇文章对你有所帮助,还请客官一件四连!❤️

基础不牢,地动山摇! 快来和博主一起来牛客网刷题巩固基础知识吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/410136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《文章复现》考虑用户舒适度的冷热电多能互补综合能源系统优化调度

说明书 免费&#xff1a;https://download.csdn.net/download/qq_50594161/87625438 MATLAB代码&#xff1a;考虑用户舒适度的冷热电多能互补综合能源系统优化调度 关键词&#xff1a;用户舒适度 综合能源 PMV 优化调度 参考文档&#xff1a;《冷热电气多能互补的微能源网鲁…

点击开关按钮,js实现电灯开关效果

初识js&#xff0c;跟大家分享js实现电灯开关灯效果的具体代码&#xff0c;利用简单的htmljs模拟电灯开关的小案例。 首先进行案例分析&#xff1a; 1.获取图片属性 2.判断变量的值 3.点击时切换图片 通过点击按钮实现电灯开关 以下是两张需要的图片&#xff0c;接下来添加…

vue3路由配置及路由跳转传参

1、安装路由 npm i vue-router 2、编写需要展示的路由 在src目录下创建pages文件夹&#xff0c;里面创建两个vue文件命名为student.vue,person.vue 分别编写两个vue文件 student.vue和person.vue <template>学生 </template><script setup></script…

后端架构token授权认证机制:spring security JSON Web Token(JWT)简例

后端架构token授权认证机制&#xff1a;spring security JSON Web Token&#xff08;JWT&#xff09;简例 在基于token的客户端-服务器端认证授权以前&#xff0c;前端到服务器端的认证-授权通常是基于session&#xff0c;自从token机制出现并流行起来后&#xff0c;基于token…

微信小程序详细登录流程(图解+代码流程)

&#x1f482; 个人网站:【紫陌】【笔记分享网】&#x1f485; 想寻找共同学习交流、共同成长的伙伴&#xff0c;请点击【前端学习交流群】微信小程序的登录和web端的登录有一点是不同的&#xff0c;小程序需要和微信的服务通信验证。1.小程序登录流程官网图官网图地址2.认识op…

【node进阶】深度解析Express框架--路由、中间件

✅ 作者简介&#xff1a;一名普通本科大三的学生&#xff0c;致力于提高前端开发能力 ✨ 个人主页&#xff1a;前端小白在前进的主页 &#x1f525; 系列专栏 &#xff1a; node.js学习专栏 ⭐️ 个人社区 : 个人交流社区 &#x1f340; 学习格言: ☀️ 打不倒你的会使你更强&a…

完全卸载vscode

背景 由于插件崩溃、不正确操作等导致vscode出现异常现象&#xff0c;如&#xff1a;代码高亮失效、无法进行转到定义等&#xff0c;此时的vscode就需要重新完全卸载删除再安装&#xff0c;恢复初始化。 步骤 1、卸载vscode&#xff1a; 任何方法都可以&#xff0c;比如win…

vue 遍历数组

1.forEach(): 遍历数组 需要一个回调函数作为参数 回调函数的形参: ①. value: 遍历数组的内容 ②.index: 对应数组的索引 ③.array: 数组本身 forEach() 方法主要是用于调用数组的每个元素&#xff0c;并将元素传递给回调函数。 注:对于空数组不会执行回调函数 语法: ar…

jsoup 框架的使用指南

概述 参考&#xff1a; 官方文档jsoup的使用JSoup教程jsoup 在 GitHub 的开源代码 概念简介 jsoup 是一款基于 Java 的 HTML 解析器&#xff0c;它提供了一套非常省力的 API&#xff0c;不但能直接解析某个 URL 地址、HTML 文本内容&#xff0c;而且还能通过类似于 DOM、CS…

刷题日常计~JS①

作者 : SYFStrive 博客首页 : 点击跳转HomePage &#x1f4dc;&#xff1a; 初编程JavaScript之每天10题 &#x1f449; 从质变到量变&#x1f4aa; &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f5…

Vue常见报错及解决方案

写代码的过程中一定会遇到报错&#xff0c;遇到报错不要担心&#xff0c;认真分析就可以解决报错&#xff0c;同时积累经验&#xff0c;早日成为大牛&#x1f44d; 本文会整理一些在编码过程中遇到的常见报错&#xff0c;共同学习。 一、报错结构 二、常见问题总结及解决方法 …

微信小程序跳转外部链接

微信小程序跳转外部链接 在开发小程序过程中&#xff0c;我们可能会有这样的需求&#xff0c;在小程序中打开H5或者外部链接 实现方法如下&#xff1a; 1、配置业务域名 小程序管理后台——开发(开发管理)——开发设置&#xff1a;新增业务域名 在这里将你需要的外部链接域…

超详细的正则表达式的使用方法,学不会找我

正则表达式的基本使用 前言&#xff1a; 在我们开发过程中&#xff0c;有很多地方需要用到正则表达式。如验证用户登录信息、手机号、邮箱地址等等。那你都会正则表达式的哪几个方法呢&#xff1f; 首先&#xff0c;我们要知道什么是正则表达式。 正则表达式的定义&#xff…

节流还在用JS吗?CSS也可以实现哦

函数节流是一个我们在项目开发中常用的优化手段&#xff0c;可以有效避免函数过于频繁的执行。一般函数节流用在scroll页面滚动&#xff0c;鼠标移动等。 为什么需要节流呢&#xff0c;因为触发一次事件就会执行一次事件&#xff0c;这样就形成了大量操作dom,会出现卡顿的情况…

ES6模块化(默认导入导出、按需导入导出、直接导入)

一、介绍ES6模块化 ES6 模块化规范是浏览器端与服务器端通用的模块化规范&#xff0c;ES6模块化的出现前端开发者不再需要额外的学习其他的模块化规范。 二、ES6 模块化规范中定义&#xff1a; 1.每个 js 文件都是一个独立的模块 2.导入其它模块成员使用 import 关键字 3.向外…

React组件——类组件

一、组件的概念 使用组件的方式进行编程&#xff0c;可以提高开发效率&#xff0c;提高组件的复用性、提高代码的可维护性和可扩展性 React定义组件的方式有两种 类组件:React16.8版本之前几乎React使用的都是类组件 函数组件:React16.8之后&#xff0c;函数式组件使用的越…

2023高频前端面试题(含答案)

一、简单页面 1、CSS选择器样式优先级 2、CSS实现三列布局&#xff08;左右固定宽度&#xff0c;中间自适应&#xff09; &#xff08;1&#xff09;CSS浮动 第一个float:left&#xff0c;第二个float:right&#xff0c;第三个设置margin-left和margin-right &#xff08;2&am…

什么是Mixin?带你了解Vue中的Mixin混入

什么是Mixin&#xff1f;本篇文章带大家了解一下Vue中的Mixin混入&#xff0c;介绍Mixin和Vuex的区别&#xff0c;Mixin的使用方法&#xff0c;希望对大家有所帮助&#xff01; Vue框架现在基本上已经占据了前端的半壁江山&#xff0c;Vue的数据驱动和组件化的思想深入人心。Vu…

web前端-JavaScript中的数组详解

&#x1f41a;作者简介&#xff1a;苏凉&#xff08;专注于网络爬虫&#xff0c;数据分析&#xff0c;正在学习前端的路上&#xff09; &#x1f433;博客主页&#xff1a;苏凉.py的博客 &#x1f310;系列总专栏&#xff1a;web前端基础教程 &#x1f451;名言警句&#xff1a…

我用尽了洪荒之力,解开了ChatGPT 写前端代码的封印,结果...

我用尽了洪荒之力&#xff0c;解开了ChatGPT 写前端代码的封印介绍ChapGPT 听起来好得令人难以置信&#xff0c;所以让我们让它为我们编写一些 JS 代码。我想看看它是否可以解决我作为前端开发人员每天所做的任务。是驴子是马拉出来溜溜&#xff0c;我们还是直接进入主题一探究…