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开发者工具使用指南
- 打开调试工具:
F12或右键"检查" - 断点调试:
- 在Sources面板设置断点
- 使用
debugger语句触发断点
- 控制台操作:
console.log("普通信息"); console.error("错误信息"); console.table(dataArray); // 表格展示数据 - 网络监控:
- 查看请求/响应详情
- 分析加载性能
六、最佳实践
-
事件委托:利用事件冒泡处理动态元素
document.querySelector("ul").addEventListener("click", function(e) { if(e.target.tagName === "LI") { console.log("点击列表项:", e.target.textContent); } }); -
性能优化:
- 减少DOM操作次数
- 使用事件节流/防抖
- 合理使用缓存
-
现代ES6+特性:
// 箭头函数 const sum = (a, b) => a + b; // 模板字符串 const greeting = `Hello, ${username}!`; // 解构赋值 const { width, height } = element.getBoundingClientRect();
通过系统学习这些核心概念并实践典型案例,开发者可以构建交互丰富、性能优越的现代Web应用。建议读者在理解基本原理的基础上,多进行实践操作,逐步掌握JavaScript在浏览器环境中的强大能力。
浙公网安备 33010602011771号