完整示例 JS 代码(融合大量JS知识点 + 智慧城市比喻注释)

完整示例 JS 代码(融合大量JS知识点 + 智慧城市比喻注释)

场景:智慧小区公示大屏,JS运维员 统计住户、校验登记、调用模拟API、操作公示大屏DOM。
包含:let/const、基础数据类型、数组、对象、函数、箭头函数、if判断、for循环、事件、DOM操作、异步请求、可选链、严格模式、console日志、异常捕获。

<!DOCTYPE html>
<html lang="zh-CN">
<body>
  <!-- 智慧小区公示大屏:HTML图纸部分 -->
  <h2>智慧小区住户登记公示屏</h2>
  <input id="nameInput" placeholder="输入住户姓名">
  <input id="roomInput" placeholder="输入房号">
  <button id="addBtn">登记住户</button>
  <div id="showList">住户名单展示区(DOM广告牌)</div>

<script>
'use strict'; // 严格模式:给运维员定规矩,禁止乱写代码,减少低级错误

// ===================== 【收纳盒:变量】=====================
// const 固定收纳盒:盒子一旦放入物品,不能更换里面的东西
const communityName = "阳光智慧小区"; 
// let 可修改收纳盒:盒子里面内容后续可以替换
let residentCount = 0; 

// 基础数据类型(运维收纳盒存放的不同物品)
let roomNumber = 1201;        // Number 数字:房号
let residentName = "老王";    // String 文字:住户姓名
let isPaidFee = true;         // Boolean真假标记:true已缴费 / false欠费
let emptyBox = null;          // null:收纳盒手动清空,里面啥都没有
let unknownThing;             // undefined:收纳盒存在,但从没放过东西

// ===================== 【数组:一排连续档案格子】=====================
// 一排档案格,下标从0开始,用来存放多名住户信息
let residentArr = [];

// ===================== 【对象:单张住户档案卡片】=====================
function createResident(name, room) {
  // 档案卡片:包含姓名、房号、缴费状态,卡片自带打招呼动作
  return {
    name: name,
    room: room,
    isPaid: false,
    sayHello: function() {
      console.log(`你好,住户${this.name}`); // this:当前这张档案卡片本身
    }
  }
}

// ===================== 【普通函数:打包一套固定工作流程】=====================
// 任务:校验市民在大屏输入的信息是否合法(本地表单校验,不用跑机房)
function checkInput(nameStr, roomStr) {
  if (!nameStr) {
    return { ok: false, msg: "姓名不能为空!" };
  }
  // isNaN 判断是不是非数字
  if(isNaN(roomStr) || Number(roomStr) <= 0){
    return { ok: false, msg: "房号必须是大于0的数字!" };
  }
  return { ok: true, msg: "校验通过" };
}

// ===================== 【箭头函数:简洁版小任务指令】=====================
// 遍历住户,筛选欠费住户
const getUnpaidResident = (list) => {
  let unpaidList = [];
  // for循环:运维员逐个翻阅档案格子,重复执行操作
  for(let i = 0; i < list.length; i++){
    if(list[i].isPaid === false){
      unpaidList.push(list[i]); // push:档案格子末尾新增一张档案卡
    }
  }
  return unpaidList;
}

// ===================== 【DOM操作:运维员指挥document物业总管,操作公示大屏广告牌】=====================
const showDom = document.querySelector("#showList"); // 找到大屏上【住户名单广告牌】
const nameDom = document.querySelector("#nameInput");
const roomDom = document.querySelector("#roomInput");
const addBtn = document.querySelector("#addBtn");

// ===================== 【事件:监听市民点击按钮动作】=====================
// 市民点击登记按钮,触发运维员执行整套登记任务
addBtn.addEventListener("click", async function(){
  try { // try-catch 异常捕获:一旦流程出错,不会让整个大屏直接崩溃
    const inputName = nameDom.value.trim();
    const inputRoom = roomDom.value.trim();

    // 调用校验任务
    const checkResult = checkInput(inputName, inputRoom);
    if(checkResult.ok === false){
      alert(checkResult.msg); // alert 大屏弹窗提示
      return;
    }

    // 创建住户档案卡片
    const newResident = createResident(inputName, Number(inputRoom));
    residentArr.push(newResident);
    residentCount++;

    // 更新公示大屏广告牌文字
    showDom.innerHTML = "";
    // 循环,把全部住户渲染到大屏
    for(let j = 0; j < residentArr.length; j++){
      const item = residentArr[j];
      // 可选链 ?. 安全读取:档案不存在也不会直接报错崩溃
      showDom.innerHTML += `<div>住户:${item?.name},房号:${item?.room}</div>`;
    }
    newResident.sayHello();

    // =====================【异步请求:运维员呼叫城市数据中心API窗口】=====================
    // 模拟调用后端API,把新住户上报到机房档案室
    const res = await fetch("[https://jsonplaceholder.typicode.com/posts](https://jsonplaceholder.typicode.com/posts)", {
      method:"POST",
      body: JSON.stringify(newResident) // JSON:打包档案卡片,发给总部
    });
    const data = await res.json();
    console.log("总部返回登记回执", data); // console.log:运维员工作记录本,控制台打印日志

  } catch (err) {
    console.error("登记出错:", err);
    alert("网络故障,上报总部失败!");
  }
})

</script>
</body>
</html>

配套课堂讲解(一段口述,配合代码)

咱们继续智慧城市比喻:
'use strict' 是给大屏运维员定工作纪律。
let / const 是运维员手里的收纳盒,const盒子固定不能换内容,let盒子可以反复修改。
数字、文字、真假标记、null、undefined,都是收纳盒存放的不同类型物品。
数组[]就是一排连续的档案格子;对象{}就是一张住户档案卡,档案卡里面还可以附带动作方法,this代表当前这张卡片。
普通函数是打包好的整套工作任务;箭头函数是简短的小任务。
if判断用来做条件分支,for循环用来批量翻阅档案。
querySelector是运维员找到公示大屏上的广告牌;addEventListener监听事件,等待市民点击按钮才开始干活。
try/catch用来捕获异常,防止大屏程序直接崩溃;可选链?.安全读取档案信息。
fetch异步请求就是运维员向城市数据中心API窗口提交档案,JSON用来打包档案传递给后端。
console.log是运维员的工作日志,alert是大屏弹窗提示。

黑板知识点清单(对照代码)

JS运维员代码包含知识点清单
1. use strict 严格模式
2. let / const 变量,基础数据类型
3. 数组 Array,push增加元素
4. 对象 Object、this
5. 普通函数、箭头函数
6. if 判断,for循环
7. DOM查询、innerHTML修改页面
8. 事件 click 点击事件
9. 表单校验
10. 可选链 ?.
11. try catch 异常捕获
12. 异步 async / await、fetch API网络请求
13. JSON 数据打包
14. console.log日志,alert弹窗

需要我把这段代码精简成可直接复制的极简版本,去掉长注释,只保留代码,给学员上机练习吗?

posted @ 2026-10-15 13:28  华腾智算  阅读(2)  评论(0)    收藏  举报
https://damo.alibaba.com/ https://tianchi.aliyun.com/course?spm=5176.21206777.J_3941670930.5.87dc17c9BZNvLL