JavaScript——从语法基础到综合项目构建

一、JavaScript知识体系全景

1. 核心语法基础

// 变量声明与作用域
let count = 0;            // 块级作用域
const PI = 3.1415;        // 常量

// 数据类型与转换
typeof "Hello"           // "string"
Number("123")            // 123
Boolean("")              // false

// 流程控制
const score = 85;
if (score >= 90) {
  console.log("优秀");
} else if (score >= 60) {
  console.log("合格");
} else {
  console.log("不合格");
}

2. 函数与对象系统

// 函数定义与调用
function calculateArea(radius) {
  return Math.PI * radius ** 2;
}

// 对象与原型
const user = {
  name: "Alice",
  greet() {
    return `Hello, ${this.name}!`;
  }
};

// 内置对象
const now = new Date();
const regex = /[A-Z]/g;  // 正则表达式

二、BOM编程:浏览器交互核心

1. Window对象操作

// 弹窗控制
window.open("popup.html", "_blank", "width=400,height=300");

// 定时任务
let timer = setInterval(() => {
  console.log("每秒执行");
}, 1000);

// 清除定时器
clearInterval(timer);

2. 页面导航与历史记录

<!-- 页面跳转 -->
<button onclick="location.href='home.html'">返回首页</button>

<!-- 历史操作 -->
<a href="javascript:history.back()">上一页</a>
运行 HTML

三、DOM编程:动态页面构建

1. 元素访问与操作

// 获取元素
const header = document.getElementById("header");
const inputs = document.getElementsByTagName("input");

// 动态样式修改
header.style.color = "#4a90e2";
header.classList.add("active");

// 节点管理
const newDiv = document.createElement("div");
document.body.appendChild(newDiv);

2. 实战:树形菜单实现

<ul class="menu">
  <li onclick="toggleSubmenu('sub1')">前端技术
    <ul id="sub1" class="submenu">
      <li>HTML</li>
      <li>CSS</li>
    </ul>
  </li>
</ul>
运行 HTML
function toggleSubmenu(id) {
  const submenu = document.getElementById(id);
  submenu.style.display = submenu.style.display === "block" ? "none" : "block";
}

四、表单验证与用户体验

1. 正则表达式验证

// 邮箱验证
function validateEmail(email) {
  return /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(email);
}

// 密码强度检测
const password = "Passw0rd!";
let strength = 0;
if (/[A-Z]/.test(password)) strength++;
if (/[0-9]/.test(password)) strength++;

2. 实时反馈优化

input.addEventListener("input", (e) => {
  const errorDiv = e.target.nextElementSibling;
  errorDiv.textContent = validateInput(e.target.value);
});

五、综合实战:购物车系统开发

1. 自动金额计算

function updateTotal() {
  const rows = document.querySelectorAll("#cart tr");
  let total = 0;
  
  rows.forEach(row => {
    const price = parseFloat(row.querySelector(".price").textContent);
    const quantity = parseInt(row.querySelector(".quantity input").value);
    total += price * quantity;
  });
  
  document.getElementById("total").textContent = total.toFixed(2);
}

2. 全选功能实现

document.getElementById("selectAll").addEventListener("change", (e) => {
  const checkboxes = document.querySelectorAll(".item-checkbox");
  checkboxes.forEach(checkbox => checkbox.checked = e.target.checked);
});

3. 动态删除商品

function deleteItem(button) {
  const row = button.closest("tr");
  row.parentNode.removeChild(row);
  updateTotal();
}

六、性能优化与最佳实践

  1. DOM操作优化

    // 使用文档片段批量插入
    const fragment = document.createDocumentFragment();
    for (let i=0; i<100; i++) {
      const div = document.createElement("div");
      fragment.appendChild(div);
    }
    document.body.appendChild(fragment);
  2. 事件委托

    document.querySelector(".menu").addEventListener("click", (e) => {
      if (e.target.tagName === "LI") {
        toggleSubmenu(e.target.dataset.submenu);
      }
    });
  3. 模块化开发

    // 使用ES6模块
    import Cart from "./cart.js";
    const myCart = new Cart();

七、常见问题解答

Q1:如何实现页面加载弹窗?

window.onload = () => {
  window.open("ad.html", "", "width=500,height=300");
};

Q2:动态修改CSS样式的三种方式?

  1. 直接修改style属性

  2. 切换class类名

  3. 使用CSSStyleSheetAPI

Q3:如何检测浏览器兼容性?

// 检测fetch API支持
if (window.fetch) {
  // 使用现代API
} else {
  // 降级方案
}

延伸学习方向

  1. 前端框架:React/Vue中的状态管理

  2. 服务端开发:Node.js与Express框架

  3. 数据可视化:D3.js与Canvas

  4. 性能监控:Lighthouse与Chrome DevTools

资源推荐

  • MDN JavaScript文档

  • 《JavaScript高级程序设计》

  • freeCodeCamp实战项目库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬码红绿灯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值