• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

奋斗的软件工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

JavaScript核心概念与实战案例详解

JavaScript核心概念与实战案例详解

一、BOM(浏览器对象模型)

1. Window对象

浏览器窗口的顶层对象,包含控制浏览器窗口的核心方法

1.1 消息框方法

// 警告框
alert("操作提示信息");

// 确认框(返回布尔值)
const isConfirm = confirm("确认删除?");

// 输入框(返回输入值/null)
const userName = prompt("请输入姓名", "默认值");

1.2 定时器机制

// 周期性定时器
let timer = setInterval(() => {
    console.log("每秒执行");
}, 1000);

// 单次定时器
setTimeout(() => {
    clearInterval(timer); // 清除定时器
}, 5000);

1.3 窗口控制

// 新窗口打开页面
window.open("https://www.example.com");

// 获取窗口尺寸
const width = window.innerWidth;
const height = window.innerHeight;

2. Location对象

管理浏览器地址栏信息

// 获取当前URL
console.log(location.href);

// 页面跳转
location.href = "https://www.newpage.com";

// 重新加载页面
location.reload(true); // 强制刷新

3. History对象

操作浏览历史记录

// 后退一页
history.back();

// 前进两页
history.go(2);

// 添加历史记录
history.pushState({page: 1}, "title", "page1.html");

二、DOM(文档对象模型)

1. 元素操作

1.1 元素获取

// ID选择器
const header = document.getElementById("main-header");

// 类选择器
const items = document.getElementsByClassName("list-item");

// 标签选择器
const imgs = document.getElementsByTagName("img");

// CSS选择器
const btn = document.querySelector("#submit-btn");
const allBtns = document.querySelectorAll(".btn");

1.2 属性操作

// 获取/设置属性
const link = document.querySelector("a");
console.log(link.getAttribute("href"));
link.setAttribute("target", "_blank");

// 删除属性
link.removeAttribute("title");

// 数据属性操作
link.dataset.userId = "12345";

1.3 内容操作

const div = document.querySelector(".content");

// HTML内容操作
div.innerHTML = "<strong>新内容</strong>";

// 文本内容操作
div.textContent = "纯文本内容";

// 值操作(表单元素)
const input = document.querySelector("input");
input.value = "默认值";

2. 元素增删改

2.1 创建元素

const newDiv = document.createElement("div");
newDiv.className = "card";

2.2 插入元素

// 末尾追加
document.body.appendChild(newDiv);

// 指定位置插入
const container = document.querySelector(".container");
container.insertBefore(newDiv, container.firstChild);

2.3 删除元素

const oldElement = document.querySelector(".old");
oldElement.parentNode.removeChild(oldElement);

// 现代方法
oldElement.remove();

三、事件处理机制

1. 事件绑定方式

1.1 HTML属性绑定

<button onclick="handleClick()">点击</button>

<script>
function handleClick() {
    console.log("按钮被点击");
}
</script>

1.2 DOM属性绑定

const btn = document.querySelector("#myBtn");

// 传统方式
btn.onclick = function() {
    console.log("点击事件1");
};

// 现代方式(推荐)
btn.addEventListener("click", function(event) {
    console.log("点击事件2");
    event.preventDefault(); // 阻止默认行为
});

2. 常用事件类型

事件类型 描述 典型应用场景
click 鼠标点击 按钮操作
dblclick 双击 快速操作确认
mouseover 鼠标悬停 提示信息显示
mouseout 鼠标移出 隐藏提示信息
keydown 键盘按下 快捷键操作
keyup 键盘释放 输入验证
focus 获取焦点 输入框高亮
blur 失去焦点 表单验证
change 值改变 下拉菜单联动
submit 表单提交 表单数据校验

四、实战案例解析

案例1:动态数字时钟

<div id="clock"></div>
<button id="start">开始</button>
<button id="pause">暂停</button>

<script>
let timer;
const clock = document.getElementById("clock");
const startBtn = document.getElementById("start");
const pauseBtn = document.getElementById("pause");

function updateTime() {
    const now = new Date();
    clock.textContent = now.toLocaleTimeString();
}

startBtn.addEventListener("click", () => {
    timer = setInterval(updateTime, 1000);
    startBtn.disabled = true;
    pauseBtn.disabled = false;
});

pauseBtn.addEventListener("click", () => {
    clearInterval(timer);
    startBtn.disabled = false;
    pauseBtn.disabled = true;
});
</script>

案例2:表单验证系统

<form id="registerForm">
    <input type="text" id="username" placeholder="用户名">
    <span class="error" id="nameError"></span>
    
    <input type="password" id="password" placeholder="密码">
    <span class="error" id="pwdError"></span>
    
    <button type="submit">注册</button>
</form>

<script>
const form = document.getElementById("registerForm");
const username = document.getElementById("username");
const password = document.getElementById("password");

// 用户名验证(6-12位字母数字)
username.addEventListener("blur", () => {
    const regex = /^[a-zA-Z0-9]{6,12}$/;
    if(!regex.test(username.value)) {
        document.getElementById("nameError").textContent = "无效用户名";
    }
});

// 密码验证(至少6位)
password.addEventListener("blur", () => {
    if(password.value.length < 6) {
        document.getElementById("pwdError").textContent = "密码过短";
    }
});

// 表单提交验证
form.addEventListener("submit", (event) => {
    event.preventDefault();
    
    if(validateForm()) {
        form.submit();
    }
});

function validateForm() {
    // 综合所有验证逻辑
    return true; // 返回验证结果
}
</script>

五、调试技巧

Chrome开发者工具使用指南

  1. 打开调试工具:F12 或右键"检查"
  2. 断点调试:
    • 在Sources面板设置断点
    • 使用debugger语句触发断点
  3. 控制台操作:
    console.log("普通信息");
    console.error("错误信息");
    console.table(dataArray); // 表格展示数据
    
  4. 网络监控:
    • 查看请求/响应详情
    • 分析加载性能

六、最佳实践

  1. 事件委托:利用事件冒泡处理动态元素

    document.querySelector("ul").addEventListener("click", function(e) {
        if(e.target.tagName === "LI") {
            console.log("点击列表项:", e.target.textContent);
        }
    });
    
  2. 性能优化:

    • 减少DOM操作次数
    • 使用事件节流/防抖
    • 合理使用缓存
  3. 现代ES6+特性:

    // 箭头函数
    const sum = (a, b) => a + b;
    
    // 模板字符串
    const greeting = `Hello, ${username}!`;
    
    // 解构赋值
    const { width, height } = element.getBoundingClientRect();
    

通过系统学习这些核心概念并实践典型案例,开发者可以构建交互丰富、性能优越的现代Web应用。建议读者在理解基本原理的基础上,多进行实践操作,逐步掌握JavaScript在浏览器环境中的强大能力。

posted on 2025-02-15 10:41  周政然  阅读(103)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3