[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-public-21zUHQYS":3,"public-project-articles-21zUHQYS":17},{"id":4,"uuid":5,"project_id":6,"title":7,"content":8,"type":9,"status":10,"public_enabled":10,"views":11,"sort":12,"created_at":13,"updated_at":14,"project_title":15,"project_slug":16},35,"21zUHQYS",39,"02. JavaScript入门","\n菜鸟教程：[https:\u002F\u002Fwww.runoob.com\u002Fjs\u002Fjs-tutorial.html](https:\u002F\u002Fwww.runoob.com\u002Fjs\u002Fjs-tutorial.html)\n\n本节课源码：\n[https:\u002F\u002Fpan.baidu.com\u002Fs\u002F1v3OOQpIsSV25v8pQCjyBow?pwd=b562](https:\u002F\u002Fpan.baidu.com\u002Fs\u002F1v3OOQpIsSV25v8pQCjyBow?pwd=b562)\n\n# JS\n\n对象操作\n\n- 对象增删改查\n  - 创建对象 let obj = {}\n  - 新增属性 obj.a = 1\n  - 修改属性 obj.a = 'a'\n  - 查询属性 obj.a\n  - 删除属性 delete obj.a\n- 其他操作\n  - obj[a] = 1\n  - Object.assign() \u002F\u002F 深拷贝 ? 浅拷贝\n  - let { name } = user\n  - **?. ** b = a?.name a 是 undefined 或者 null b 不报错\n\n![image.png](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2023\u002Fpng\u002F751015\u002F1690983494164-e8b6412b-d36d-4878-a305-5b80330308a9.png#averageHue=%23feeeec&clientId=ue83d1874-55e8-4&from=paste&height=49&id=ue975b07f&originHeight=61&originWidth=724&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=4612&status=done&style=none&taskId=uc5e1ee75-6b30-48e6-ad14-ea3aa6a0438&title=&width=579.2)\n\n- ?? b = a ?? c a 是 undefined 或者 null 则赋值 c 给 b\n- **||** b = a || c a 是 undefined 或者 null 则取 c\n- ??= b ??= a 左侧是 undefined 或者 null 则取右侧的值\n- 循环对象属性 for key in obj Object.keys(obj)\n\n![image.png](https:\u002F\u002Fcdn.nlark.com\u002Fyuque\u002F0\u002F2023\u002Fpng\u002F751015\u002F1690984494169-89adfe1b-a1bc-4662-945e-dec6e7a24404.png#averageHue=%23d7d6d5&clientId=ue83d1874-55e8-4&from=paste&height=724&id=u7ee0ac45&originHeight=905&originWidth=1056&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=64205&status=done&style=none&taskId=u6370dfe9-0bb3-4d4a-a168-329c093a462&title=&width=844.8)\n数组操作\n\n- 数组的增删改查\n  - 创建数组 let arr = []\n  - 新增元素\n    - arr[0] = 1 arr[2] = 3\n    - push()\n    - unshift()\n  - 删除元素\n    - splice()\n    - pop()\n    - shift()\n  - 修改元素 arr[index] = 1\n  - 查询元素 arr[index]\n  - 截取数组 slice()\n  - 合并数组 concat()\n  - 字符串变数组 split()\n  - 数组变字符串 join() 默认使用’,'号分割\n  - 排序 sort() [有坑] [1,2,10] -> [1,10,2] **.sort((a,b) => a-b) 正序 **\n  - 倒序 reverse() ** .sort((a,b) => b-a) 倒序**\n  - 获取元素序号 indexOf() lastIndexOf()\n  - [神器] filter() 可以筛选和删除元素\n    - let newArr = users.filter(v => v.name !== '李四' && v.name !== '王二') \u002F\u002F 删除数组的指定元素 是不是很舒服\n  - [神器] find()\n  - [神器] map() [1,2,3].map(v => v \\*2) [{name: 'a'}, {name:b}].map(v => v.name)\n  - forEach([item], [index])\n  - reduce\n    - 语法：arr.reduce(function(prev,cur,index,arr){...}, init);\n    - prev 累计器累计回调的返回值，表示上一次调用回调时的返回值，或者初始值 init\n    - cur 表示当前正在处理的数组元素\n    - index 表示当前正在处理的数组元素的索引\n    - arr 表示原数组\n    - init 初始值\n    - arr = [1,2,3] let sum = arr.reduce((pre, cur) => pre + cur)\n\n```javascript\nlet names =['a', 'b', 'c', 'a', 'b']\nlet res = names.reduce((all, cur) => {\n  console.log(all, cur)\n  if (cur in all) {\n    all[cur]++;\n  } else {\n    all[cur] = 1;\n  }\n  return all\n}, {})\n\n```\n\nJSON - 数据传输的格式\n[https:\u002F\u002Fwww.json.cn\u002F](https:\u002F\u002Fwww.json.cn\u002F)\n\n- 标准的 JSON\n  - json 对象 {}\n  - json 数组 []\n- json 数据格式： { \"name\": \"张三\", \"age\": 23, \"man\", true, \"children\": [ { \"name\": \"张小宝\", \"age\": 20 } ]}\n","coding",1,2017,57,"2025-04-08 11:27:55","2026-05-03 22:49:02","【青哥带小白做毕设2024】完整教程资料汇总","qingge-graduation-project-2024",{"project":18,"items":19},{"id":6,"title":15,"slug":16},[20,28,35,36,43,50,57,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168],{"id":21,"uuid":22,"project_id":6,"title":23,"type":9,"status":10,"public_enabled":10,"views":24,"sort":25,"created_at":26,"updated_at":27,"project_title":15,"project_slug":16},33,"R1oMCsCX","00. 从0开始带小白做SpringBoot+Vue+uniapp微信小程序实战项目",12130,55,"2025-04-08 11:28:17","2026-05-07 15:33:28.189425+00",{"id":29,"uuid":30,"project_id":6,"title":31,"type":9,"status":10,"public_enabled":10,"views":32,"sort":33,"created_at":34,"updated_at":14,"project_title":15,"project_slug":16},34,"s3u3u8W7","01. 网页布局技巧",3326,56,"2025-04-08 11:28:13",{"id":4,"uuid":5,"project_id":6,"title":7,"type":9,"status":10,"public_enabled":10,"views":11,"sort":12,"created_at":13,"updated_at":14,"project_title":15,"project_slug":16},{"id":37,"uuid":38,"project_id":6,"title":39,"type":9,"status":10,"public_enabled":10,"views":40,"sort":41,"created_at":42,"updated_at":14,"project_title":15,"project_slug":16},36,"4XVgY9Ti","03. Vue脚手架搭建",3719,58,"2025-04-08 11:27:46",{"id":44,"uuid":45,"project_id":6,"title":46,"type":9,"status":10,"public_enabled":10,"views":47,"sort":48,"created_at":49,"updated_at":14,"project_title":15,"project_slug":16},37,"S8vLLLvk","04. Git速成，推送代码到云端",1585,59,"2025-04-08 11:27:41",{"id":51,"uuid":52,"project_id":6,"title":53,"type":9,"status":10,"public_enabled":10,"views":54,"sort":55,"created_at":56,"updated_at":14,"project_title":15,"project_slug":16},38,"9EbwnGDp","05. 网页布局神器ElementUI速成",2670,60,"2025-04-08 11:27:37",{"id":6,"uuid":58,"project_id":6,"title":59,"type":9,"status":10,"public_enabled":10,"views":60,"sort":61,"created_at":62,"updated_at":14,"project_title":15,"project_slug":16},"tmzahWer","06. Vue管理系统速成",3744,61,"2025-04-08 11:27:32",{"id":64,"uuid":65,"project_id":6,"title":66,"type":9,"status":10,"public_enabled":10,"views":67,"sort":68,"created_at":69,"updated_at":14,"project_title":15,"project_slug":16},40,"2agqAUQK","07. SpringBoot速成",3654,62,"2025-04-08 11:27:27",{"id":71,"uuid":72,"project_id":6,"title":73,"type":9,"status":10,"public_enabled":10,"views":74,"sort":75,"created_at":76,"updated_at":14,"project_title":15,"project_slug":16},41,"SXPAzgy7","08. Http扫盲，让小白也能听懂",2337,63,"2025-04-08 11:27:20",{"id":78,"uuid":79,"project_id":6,"title":80,"type":9,"status":10,"public_enabled":10,"views":81,"sort":82,"created_at":83,"updated_at":14,"project_title":15,"project_slug":16},42,"ostBIxAV","09. SpringBoot集成Mybatis实现增删改查",4190,64,"2025-04-08 11:27:13",{"id":85,"uuid":86,"project_id":6,"title":87,"type":9,"status":10,"public_enabled":10,"views":88,"sort":89,"created_at":90,"updated_at":14,"project_title":15,"project_slug":16},43,"6Sv7afpa","10. Vue封装前后端数据交互工具",3716,65,"2024-04-16 02:33:13",{"id":92,"uuid":93,"project_id":6,"title":94,"type":9,"status":10,"public_enabled":10,"views":95,"sort":96,"created_at":97,"updated_at":14,"project_title":15,"project_slug":16},44,"d53BPIQs","11. Vue登录（含验证码）、注册页面开发",4867,66,"2024-04-16 02:33:08",{"id":99,"uuid":100,"project_id":6,"title":101,"type":9,"status":10,"public_enabled":10,"views":102,"sort":103,"created_at":104,"updated_at":14,"project_title":15,"project_slug":16},45,"m033ng06","12. SpringBoot集成JWT token实现权限验证",3243,67,"2024-04-16 02:33:00",{"id":106,"uuid":107,"project_id":6,"title":108,"type":9,"status":10,"public_enabled":10,"views":109,"sort":110,"created_at":111,"updated_at":14,"project_title":15,"project_slug":16},46,"7xzyVD06","13. SpringBoot+Vue实现单文件、多文件上传和下载",2784,68,"2024-04-16 02:32:52",{"id":113,"uuid":114,"project_id":6,"title":115,"type":9,"status":10,"public_enabled":10,"views":116,"sort":117,"created_at":118,"updated_at":14,"project_title":15,"project_slug":16},47,"BdOLUenp","14. 多角色登录（Vue-Router路由守卫）",2318,69,"2024-04-16 02:32:39",{"id":120,"uuid":121,"project_id":6,"title":122,"type":9,"status":10,"public_enabled":10,"views":123,"sort":124,"created_at":125,"updated_at":14,"project_title":15,"project_slug":16},48,"2Wkx3igg","15. Vue个人信息修改、修改密码、重置密码",2092,70,"2024-04-16 02:32:33",{"id":127,"uuid":128,"project_id":6,"title":129,"type":9,"status":10,"public_enabled":10,"views":130,"sort":131,"created_at":132,"updated_at":14,"project_title":15,"project_slug":16},49,"BDvVa4By","16. SpringBoot+Vue管理系统实现增删改查",2598,71,"2024-04-16 02:32:29",{"id":134,"uuid":135,"project_id":6,"title":136,"type":9,"status":10,"public_enabled":10,"views":137,"sort":138,"created_at":139,"updated_at":14,"project_title":15,"project_slug":16},50,"FJVl0rCu","17. SpringBoot+Vue实现数据的批量导入和导出",1684,72,"2024-04-16 02:32:26",{"id":141,"uuid":142,"project_id":6,"title":143,"type":9,"status":10,"public_enabled":10,"views":144,"sort":145,"created_at":146,"updated_at":14,"project_title":15,"project_slug":16},51,"FvW9oHgj","18. SpringBoot+Vue项目部署上线",2845,73,"2024-04-16 02:32:22",{"id":148,"uuid":149,"project_id":6,"title":150,"type":9,"status":10,"public_enabled":10,"views":151,"sort":152,"created_at":153,"updated_at":14,"project_title":15,"project_slug":16},52,"xyqrxxiR","19. SpringBoot+Vue集成富文本编辑器",1499,74,"2024-04-16 02:32:18",{"id":155,"uuid":156,"project_id":6,"title":157,"type":9,"status":10,"public_enabled":10,"views":158,"sort":159,"created_at":160,"updated_at":14,"project_title":15,"project_slug":16},53,"XAaCXz8W","20. SpringBoot+Vue集成系统公告",1043,75,"2024-04-16 02:32:14",{"id":162,"uuid":163,"project_id":6,"title":164,"type":9,"status":10,"public_enabled":10,"views":165,"sort":166,"created_at":167,"updated_at":14,"project_title":15,"project_slug":16},54,"2havlmaC","21. SpringBoot+Vue集成AOP系统日志",1159,76,"2024-04-16 02:32:11",{"id":25,"uuid":169,"project_id":6,"title":170,"type":9,"status":10,"public_enabled":10,"views":171,"sort":172,"created_at":173,"updated_at":14,"project_title":15,"project_slug":16},"ObvLqJdX","22. SpringBoot+Vue实现Echarts数据报表（柱状图、饼图、折线图）",1688,99,"2024-04-16 02:30:25"]