JavaScript基础入门完全指南:从零开始掌握网页交互
- 编程教程
- 15天前
- 72热度
- 0评论
1. 前言:JavaScript是什么?为什么需要学习它?
JavaScript是Web的编程语言,是前端开发的"灵魂"。HTML定义了网页的结构(骨架),CSS控制了网页的样式(皮肤),而JavaScript赋予了网页交互能力(大脑)。没有JavaScript,网页就是静态的文档;有了JavaScript,网页才能响应用户操作、动态更新内容、与服务器通信。
本教程能带给你什么?
✅ 系统掌握JavaScript核心语法与数据类型
✅ 深入理解函数、作用域和闭包
✅ 掌握DOM操作与事件处理
✅ 学会数组、对象的高级操作
✅ 了解异步编程(回调、Promise、async/await)
✅ 实战:完整交互式页面的实现
本教程覆盖JavaScript的绝大多数基础知识,适合零基础入门和进阶巩固。
2. JavaScript基础语法
2.1 引入JavaScript的三种方式
方式一:内联事件(不推荐)
<button onclick="alert('Hello')">点击</button>
方式二:内部脚本
<script>
console.log('Hello World');
</script>
方式三:外部脚本(推荐)
<script src="script.js"></script>
// script.js文件内容
console.log('Hello World');
2.2 注释与输出
// 这是单行注释
/*
这是多行注释
可以跨行
*/
// 控制台输出(调试用)
console.log('普通日志');
console.warn('警告信息');
console.error('错误信息');
console.table([{name: '张三', age: 18}]);
// 弹出提示框
alert('这是一个提示');
// 弹出确认框
confirm('你确定要删除吗?');
// 弹出输入框
prompt('请输入你的名字:');
// 页面输出
document.write('直接在页面中写入内容');
2.3 变量声明
// var(旧方式,不推荐使用)
var name = '张三';
// let(块级作用域,推荐使用)
let age = 25;
age = 26; // 可以重新赋值
// const(常量,不可重新赋值)
const PI = 3.14159;
// PI = 3.14; // 报错!
// 变量命名规则:
// 1. 只能包含字母、数字、下划线(_)和美元符号($)
// 2. 不能以数字开头
// 3. 不能使用JavaScript关键字(如if、for、function等)
// 4. 推荐使用驼峰命名法:userName, getUserInfo
2.4 数据类型
// 1. 数字类型(整数和浮点数)
let num1 = 10;
let num2 = 3.14;
let num3 = -5;
let num4 = 0.1 + 0.2; // 浮点数精度问题:0.30000000000000004
// 2. 字符串类型
let str1 = '单引号字符串';
let str2 = "双引号字符串";
let str3 = `模板字符串,支持插值:${str1}`;
// 3. 布尔类型
let isTrue = true;
let isFalse = false;
// 4. undefined(声明未赋值)
let a;
console.log(a); // undefined
// 5. null(空值)
let b = null;
// 6. 对象类型
let person = {
name: '张三',
age: 25,
isStudent: false
};
// 7. 数组类型
let fruits = ['苹果', '香蕉', '橘子'];
// 8. typeof操作符(查看类型)
console.log(typeof 10); // number
console.log(typeof 'hello'); // string
console.log(typeof true); // boolean
console.log(typeof undefined); // undefined
console.log(typeof null); // object(历史遗留问题)
console.log(typeof {}); // object
console.log(typeof []); // object
2.5 类型转换
// 隐式转换
console.log('5' + 3); // '53'(字符串拼接)
console.log('5' - 3); // 2(转为数字计算)
console.log('5' * 2); // 10(转为数字)
console.log('hello' - 1); // NaN(非数字)
// 显式转换
// 转为数字
Number('123'); // 123
Number('abc'); // NaN
parseInt('123px'); // 123(解析整数)
parseFloat('3.14'); // 3.14
+'123'; // 123(一元运算符)
// 转为字符串
String(123); // '123'
(123).toString(); // '123'
123 + ''; // '123'
// 转为布尔值
Boolean(0); // false
Boolean(''); // false
Boolean(null); // false
Boolean(undefined); // false
Boolean(NaN); // false
Boolean(1); // true
Boolean('hello'); // true
2.6 运算符
// 算术运算符
let a = 10, b = 3;
console.log(a + b); // 13(加法)
console.log(a - b); // 7(减法)
console.log(a * b); // 30(乘法)
console.log(a / b); // 3.333...(除法)
console.log(a % b); // 1(取余)
console.log(a ** b); // 1000(幂运算)
// 自增自减
let c = 5;
c++; // 先使用再自增
++c; // 先自增再使用
c--; // 先使用再自减
--c; // 先自减再使用
// 赋值运算符
let x = 10;
x += 5; // x = x + 5
x -= 3; // x = x - 3
x *= 2; // x = x * 2
x /= 4; // x = x / 4
// 比较运算符
console.log(5 > 3); // true
console.log(5 >= 5); // true
console.log(5 < 3); // false
console.log(5 <= 3); // false
console.log(5 == '5'); // true(值相等,类型不同)
console.log(5 === '5'); // false(值和类型都相等,推荐使用)
console.log(5 != '5'); // false(值相等)
console.log(5 !== '5'); // true(值相等但类型不同)
// 逻辑运算符
console.log(true && false); // false(与)
console.log(true || false); // true(或)
console.log(!true); // false(非)
// 三元运算符
let age = 18;
let canVote = age >= 18 ? '可以投票' : '不能投票';
3. 条件语句
3.1 if语句
let score = 85;
// 单分支
if (score >= 60) {
console.log('及格了!');
}
// 双分支
if (score >= 60) {
console.log('及格了!');
} else {
console.log('不及格!');
}
// 多分支
if (score >= 90) {
console.log('优秀');
} else if (score >= 80) {
console.log('良好');
} else if (score >= 60) {
console.log('及格');
} else {
console.log('不及格');
}
// 嵌套if
if (score >= 60) {
if (score >= 90) {
console.log('优秀');
} else {
console.log('普通及格');
}
}
3.2 switch语句
let day = 3;
switch (day) {
case 1:
console.log('星期一');
break;
case 2:
console.log('星期二');
break;
case 3:
console.log('星期三');
break;
case 4:
console.log('星期四');
break;
case 5:
console.log('星期五');
break;
case 6:
console.log('星期六');
break;
case 7:
console.log('星期日');
break;
default:
console.log('无效日期');
}
4. 循环语句
4.1 for循环
// 基本for循环
for (let i = 0; i < 5; i++) {
console.log(i); // 0, 1, 2, 3, 4
}
// 遍历数组
let fruits = ['苹果', '香蕉', '橘子'];
for (let i = 0; i < fruits.length; i++) {
console.log(fruits[i]);
}
// 遍历对象
let person = { name: '张三', age: 25, city: '北京' };
for (let key in person) {
console.log(key + ': ' + person[key]);
}
// 遍历数组(for...of)
let colors = ['red', 'green', 'blue'];
for (let color of colors) {
console.log(color);
}
4.2 while循环
// while循环
let count = 0;
while (count < 5) {
console.log(count);
count++;
}
// do...while循环(至少执行一次)
let num = 0;
do {
console.log('执行了:' + num);
num++;
} while (num < 3);
// break(跳出循环)
for (let i = 0; i < 10; i++) {
if (i === 5) break;
console.log(i); // 0,1,2,3,4
}
// continue(跳过本次循环)
for (let i = 0; i < 10; i++) {
if (i % 2 === 0) continue;
console.log(i); // 1,3,5,7,9
}
5. 函数基础
5.1 函数声明与调用
// 函数声明
function greet(name) {
return '你好,' + name + '!';
}
// 调用函数
console.log(greet('张三'));
// 函数表达式
const add = function(a, b) {
return a + b;
};
console.log(add(5, 3));
// 箭头函数(ES6+)
const multiply = (a, b) => {
return a * b;
};
console.log(multiply(3, 4));
// 箭头函数简写(只有单条语句时)
const subtract = (a, b) => a - b;
console.log(subtract(10, 3));
// 立即执行函数(IIFE)
(function() {
console.log('立即执行');
})();
5.2 参数与返回值
// 默认参数
function greet(name = '游客') {
return '你好,' + name;
}
console.log(greet()); // 你好,游客
console.log(greet('李四')); // 你好,李四
// 不定参数(剩余参数)
function sum(...numbers) {
let total = 0;
for (let num of numbers) {
total += num;
}
return total;
}
console.log(sum(1, 2, 3, 4, 5)); // 15
// 多个返回值(使用数组或对象)
function getMinMax(arr) {
return {
min: Math.min(...arr),
max: Math.max(...arr)
};
}
console.log(getMinMax([1, 5, 3, 9, 2])); // {min: 1, max: 9}
5.3 作用域与闭包
// 全局作用域
let globalVar = '全局变量';
function testScope() {
// 函数作用域
let localVar = '局部变量';
console.log(globalVar); // 可以访问全局变量
console.log(localVar); // 可以访问局部变量
}
// console.log(localVar); // 报错:localVar is not defined
// 块级作用域(let和const)
if (true) {
let blockVar = '块级变量';
var functionVar = '函数级变量';
const constVar = '常量变量';
}
// console.log(blockVar); // 报错
// console.log(constVar); // 报错
console.log(functionVar); // 可以访问
// 闭包(函数可以访问其外部作用域的变量)
function createCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
6. 数组操作
6.1 数组基本操作
// 创建数组
let arr1 = [1, 2, 3, 4, 5];
let arr2 = new Array(1, 2, 3);
let arr3 = new Array(5); // 创建长度为5的空数组
// 访问元素
console.log(arr1[0]); // 1
console.log(arr1.length); // 5
// 添加元素
arr1.push(6); // 尾部添加
arr1.unshift(0); // 头部添加
console.log(arr1); // [0, 1, 2, 3, 4, 5, 6]
// 删除元素
arr1.pop(); // 删除尾部
arr1.shift(); // 删除头部
console.log(arr1); // [1, 2, 3, 4, 5]
// 修改元素
arr1[2] = 99;
console.log(arr1); // [1, 2, 99, 4, 5]
// 查找元素
console.log(arr1.indexOf(99)); // 2
console.log(arr1.includes(4)); // true
console.log(arr1.find(x => x > 3)); // 99
6.2 数组高阶方法(重要)
let numbers = [1, 2, 3, 4, 5];
// forEach - 遍历数组
numbers.forEach((item, index) => {
console.log(`第${index}项:${item}`);
});
// map - 映射(生成新数组)
let doubled = numbers.map(x => x * 2);
console.log(doubled); // [2, 4, 6, 8, 10]
// filter - 过滤(生成新数组)
let even = numbers.filter(x => x % 2 === 0);
console.log(even); // [2, 4]
// reduce - 归并
let sum = numbers.reduce((acc, cur) => acc + cur, 0);
console.log(sum); // 15
// find - 查找第一个匹配项
let found = numbers.find(x => x > 3);
console.log(found); // 4
// findIndex - 查找索引
let idx = numbers.findIndex(x => x > 3);
console.log(idx); // 3
// some - 是否有满足条件的
console.log(numbers.some(x => x > 5)); // false
// every - 是否全部满足条件
console.log(numbers.every(x => x > 0)); // true
// sort - 排序
let unsorted = [3, 1, 4, 1, 5, 9];
unsorted.sort((a, b) => a - b); // 升序
console.log(unsorted); // [1, 1, 3, 4, 5, 9]
// reverse - 反转
console.log(numbers.reverse()); // [5, 4, 3, 2, 1]
// 数组解构
let [first, second, ...rest] = [1, 2, 3, 4, 5];
console.log(first, second, rest); // 1, 2, [3, 4, 5]
6.3 数组常用方法速查
| 方法 | 作用 | 是否改变原数组 |
|---|---|---|
| push() | 尾部添加元素 | 是 |
| pop() | 删除尾部元素 | 是 |
| unshift() | 头部添加元素 | 是 |
| shift() | 删除头部元素 | 是 |
| splice() | 插入/删除元素 | 是 |
| slice() | 截取子数组 | 否 |
| concat() | 合并数组 | 否 |
| join() | 转为字符串 | 否 |
| forEach() | 遍历 | 否 |
| map() | 映射 | 否 |
| filter() | 过滤 | 否 |
| reduce() | 归并 | 否 |
7. 对象与JSON
7.1 对象的创建与操作
// 创建对象(字面量)
let person = {
name: '张三',
age: 25,
city: '北京',
greet() {
console.log('你好,我是' + this.name);
}
};
// 访问属性
console.log(person.name); // 点语法
console.log(person['age']); // 中括号语法
// 添加/修改属性
person.email = 'zhangsan@email.com';
person.age = 26;
// 删除属性
delete person.city;
// 遍历对象
for (let key in person) {
console.log(key + ':' + person[key]);
}
// 获取所有键
console.log(Object.keys(person)); // ['name', 'age', 'greet', 'email']
console.log(Object.values(person)); // ['张三', 26, function, 'zhangsan@email.com']
console.log(Object.entries(person)); // [['name','张三'], ['age',26], ...]
// 对象解构
let { name, age } = person;
console.log(name, age);
// 扩展运算符(浅拷贝)
let personCopy = { ...person };
let merged = { ...person, ...{ city: '上海' } };
// Object.assign
let target = {};
Object.assign(target, person);
7.2 JSON操作
// 对象转JSON字符串
let obj = { name: '张三', age: 25, hobbies: ['读书', '运动'] };
let jsonStr = JSON.stringify(obj);
console.log(jsonStr); // '{"name":"张三","age":25,"hobbies":["读书","运动"]}'
// JSON字符串转对象
let jsonStr2 = '{"name":"李四","age":30,"city":"上海"}';
let obj2 = JSON.parse(jsonStr2);
console.log(obj2.name); // 李四
// 格式化JSON(带缩进)
let formatted = JSON.stringify(obj, null, 2);
console.log(formatted);
8. DOM操作
8.1 选择元素
// 单个元素选择
document.getElementById('myId');
document.querySelector('#myId');
document.querySelector('.myClass');
document.querySelector('div');
// 多个元素选择
document.getElementsByClassName('myClass');
document.getElementsByTagName('div');
document.querySelectorAll('.myClass');
// 示例
let header = document.getElementById('header');
let items = document.querySelectorAll('.item');
let firstDiv = document.querySelector('div');
// 获取父元素、子元素
let parent = element.parentNode;
let children = element.children;
let firstChild = element.firstElementChild;
let nextSibling = element.nextElementSibling;
8.2 操作元素内容
// 操作文本内容
element.textContent = '新的文本内容';
element.innerText = '新的文本内容'; // 会触发重排
// 操作HTML内容
element.innerHTML = '<strong>加粗</strong>文本';
// 操作表单值
input.value = '新的值';
// 操作属性
element.setAttribute('class', 'active');
element.getAttribute('class');
element.removeAttribute('disabled');
// 操作class
element.classList.add('active');
element.classList.remove('active');
element.classList.toggle('active');
element.classList.contains('active');
// 操作样式
element.style.color = 'red';
element.style.backgroundColor = '#f0f0f0';
element.style.cssText = 'color: red; font-size: 16px;';
8.3 创建和删除元素
// 创建元素
let newDiv = document.createElement('div');
newDiv.textContent = '新创建的元素';
newDiv.className = 'my-class';
// 添加到父元素
let parent = document.getElementById('container');
parent.appendChild(newDiv); // 尾部添加
parent.prepend(newDiv); // 头部添加
parent.insertBefore(newDiv, referenceNode); // 插入到参考元素之前
// 删除元素
element.remove(); // 直接删除
parent.removeChild(child); // 父元素删除子元素
// 复制元素
let clone = element.cloneNode(true); // 深拷贝(包含子元素)
let clone = element.cloneNode(false); // 浅拷贝
8.4 事件处理
// 方式一:HTML属性(不推荐)
// <button onclick="handleClick()">点击</button>
// 方式二:DOM属性
let btn = document.getElementById('myBtn');
btn.onclick = function() {
console.log('按钮被点击了');
};
// 方式三:事件监听(推荐)
btn.addEventListener('click', function(event) {
console.log('事件对象:', event);
console.log('目标元素:', event.target);
console.log('事件类型:', event.type);
});
// 移除事件监听
btn.removeEventListener('click', handlerFunction);
// 常见事件
// 鼠标事件:click, dblclick, mousedown, mouseup, mouseover, mouseout, mousemove
// 键盘事件:keydown, keyup, keypress
// 表单事件:submit, change, focus, blur, input
// 窗口事件:load, resize, scroll, unload
8.5 事件对象常用属性
element.addEventListener('click', function(event) {
// 阻止默认行为(如链接跳转)
event.preventDefault();
// 阻止事件冒泡
event.stopPropagation();
// 获取鼠标位置
console.log(event.clientX, event.clientY);
console.log(event.pageX, event.pageY);
// 获取触发事件的元素
console.log(event.target);
console.log(event.currentTarget);
// 获取按键信息(键盘事件)
console.log(event.key);
console.log(event.code);
});
9. 异步编程
9.1 回调函数
// 同步操作
console.log('开始');
function syncTask() {
console.log('同步任务执行中');
}
syncTask();
console.log('结束');
// 输出:开始 → 同步任务执行中 → 结束
// 异步操作(setTimeout)
console.log('开始');
setTimeout(function() {
console.log('异步任务执行中');
}, 1000);
console.log('结束');
// 输出:开始 → 结束 → (1秒后) 异步任务执行中
9.2 Promise
// 创建Promise
const myPromise = new Promise((resolve, reject) => {
// 异步操作
let success = true;
if (success) {
resolve('操作成功!');
} else {
reject('操作失败!');
}
});
// 使用Promise
myPromise
.then(result => {
console.log('成功:', result);
return '处理后的数据';
})
.then(data => {
console.log('链式处理:', data);
})
.catch(error => {
console.log('错误:', error);
})
.finally(() => {
console.log('无论成功失败都会执行');
});
// Promise静态方法
Promise.all([promise1, promise2, promise3]).then(results => {
console.log('所有Promise都成功', results);
});
Promise.race([promise1, promise2]).then(result => {
console.log('第一个完成的Promise', result);
});
9.3 async/await(推荐)
// 声明异步函数
async function fetchData() {
try {
// 模拟异步请求
let result = await new Promise((resolve) => {
setTimeout(() => resolve('数据加载成功'), 1000);
});
console.log(result);
return result;
} catch (error) {
console.error('错误:', error);
}
}
// 调用
fetchData();
// 实际应用:获取API数据
async function getUserData(userId) {
try {
let response = await fetch(`https://api.example.com/users/${userId}`);
if (!response.ok) {
throw new Error('请求失败');
}
let data = await response.json();
return data;
} catch (error) {
console.error('获取用户数据失败:', error);
}
}
10. 实战:交互式待办事项应用
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>待办事项清单</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: system-ui, -apple-system, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
padding: 20px;
}
.container {
background: white;
border-radius: 20px;
padding: 30px;
max-width: 500px;
width: 100%;
box-shadow: 0 20px 40px rgba(0,0,0,0.2);
}
h1 {
text-align: center;
color: #333;
margin-bottom: 20px;
}
.input-group {
display: flex;
gap: 10px;
margin-bottom: 20px;
}
.input-group input {
flex: 1;
padding: 12px;
border: 2px solid #e0e0e0;
border-radius: 10px;
font-size: 16px;
transition: border-color 0.3s;
}
.input-group input:focus {
outline: none;
border-color: #667eea;
}
.input-group button {
padding: 12px 24px;
background: #667eea;
color: white;
border: none;
border-radius: 10px;
cursor: pointer;
font-weight: bold;
transition: background 0.3s;
}
.input-group button:hover {
background: #5a67d8;
}
.task-list {
list-style: none;
}
.task-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px;
background: #f8f9fa;
border-radius: 10px;
margin-bottom: 10px;
transition: all 0.3s ease;
}
.task-item:hover {
transform: translateX(5px);
}
.task-text {
flex: 1;
font-size: 16px;
}
.task-text.completed {
text-decoration: line-through;
color: #999;
}
.task-actions {
display: flex;
gap: 8px;
}
.task-actions button {
padding: 6px 12px;
border: none;
border-radius: 6px;
cursor: pointer;
font-size: 12px;
transition: all 0.3s;
}
.btn-complete {
background: #27ae60;
color: white;
}
.btn-complete:hover {
background: #219a52;
}
.btn-delete {
background: #e74c3c;
color: white;
}
.btn-delete:hover {
background: #c0392b;
}
.empty {
text-align: center;
color: #999;
padding: 30px;
}
.stats {
text-align: center;
margin-top: 20px;
padding-top: 20px;
border-top: 1px solid #eee;
color: #999;
font-size: 14px;
}
</style>
</head>
<body>
<div class="container">
<h1>📝 待办事项</h1>
<div class="input-group">
<input type="text" id="taskInput" placeholder="输入新任务...">
<button id="addBtn">添加</button>
</div>
<ul class="task-list" id="taskList">
<li class="empty">暂无任务,添加一条吧!</li>
</ul>
<div class="stats" id="stats">总计:0 项 | 已完成:0 项</div>
</div>
<script>
// 获取DOM元素
const taskInput = document.getElementById('taskInput');
const addBtn = document.getElementById('addBtn');
const taskList = document.getElementById('taskList');
const stats = document.getElementById('stats');
// 任务数组
let tasks = [];
// 加载本地存储的数据
function loadTasks() {
const stored = localStorage.getItem('tasks');
if (stored) {
tasks = JSON.parse(stored);
}
renderTasks();
}
// 保存到本地存储
function saveTasks() {
localStorage.setItem('tasks', JSON.stringify(tasks));
}
// 渲染任务列表
function renderTasks() {
if (tasks.length === 0) {
taskList.innerHTML = '<li class="empty">暂无任务,添加一条吧!</li>';
updateStats();
return;
}
let html = '';
tasks.forEach((task, index) => {
const completedClass = task.completed ? 'completed' : '';
const completeBtn = task.completed ? '' :
`<button class="btn-complete" onclick="toggleTask(${index})">完成</button>`;
html += `
<li class="task-item">
<span class="task-text ${completedClass}">${escapeHtml(task.text)}</span>
<div class="task-actions">
${completeBtn}
<button class="btn-delete" onclick="deleteTask(${index})">删除</button>
</div>
</li>
`;
});
taskList.innerHTML = html;
updateStats();
}
// HTML转义(防止XSS攻击)
function escapeHtml(text) {
const div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
}
// 更新统计
function updateStats() {
const total = tasks.length;
const completed = tasks.filter(t => t.completed).length;
stats.textContent = `总计:${total} 项 | 已完成:${completed} 项`;
}
// 添加任务
function addTask() {
const text = taskInput.value.trim();
if (!text) {
alert('请输入任务内容');
return;
}
tasks.push({ text, completed: false });
taskInput.value = '';
saveTasks();
renderTasks();
taskInput.focus();
}
// 切换任务状态
function toggleTask(index) {
tasks[index].completed = !tasks[index].completed;
saveTasks();
renderTasks();
}
// 删除任务
function deleteTask(index) {
if (confirm('确定删除这个任务吗?')) {
tasks.splice(index, 1);
saveTasks();
renderTasks();
}
}
// 按回车键添加
taskInput.addEventListener('keydown', function(event) {
if (event.key === 'Enter') {
addTask();
}
});
// 点击添加按钮
addBtn.addEventListener('click', addTask);
// 初始化
loadTasks();
</script>
</body>
</html>
11. 调试技巧
11.1 浏览器开发者工具
// 打开F12开发者工具
// Console面板 - 执行JavaScript和查看输出
console.log('调试信息');
console.error('错误信息');
console.warn('警告信息');
console.table([{name: '张三', age: 25}]);
// Sources面板 - 设置断点
// 点击行号设置断点,代码执行到断点处暂停
// Network面板 - 查看网络请求
// 查看API请求的请求头、响应数据、耗时
// Elements面板 - 查看DOM结构
// 实时修改HTML和CSS
// debugger语句(程序内设置断点)
function testDebug() {
let a = 10;
debugger; // 执行到这里会暂停
let b = 20;
console.log(a + b);
}
12. 总结与学习资源
恭喜你完成了JavaScript基础知识的系统学习!你已经掌握了:
✅ JavaScript基本语法与数据类型
✅ 条件判断与循环控制
✅ 函数与作用域
✅ 数组与对象操作
✅ DOM操作与事件处理
✅ 异步编程(回调、Promise、async/await)
✅ 完整交互式页面实战
推荐学习资源:
🔹 MDN JavaScript文档:developer.mozilla.org/zh-CN/docs/Web/JavaScript
🔹 JavaScript.info:zh.javascript.info
🔹 菜鸟教程JavaScript:runoob.com/js/js-tutorial.html
🔹 在线练习:freeCodeCamp、Codecademy
最后的建议:JavaScript是一门非常灵活的语言,初学者容易忽略一些细节。建议多动手写代码,遇到问题善用console.log()调试。掌握基础知识后,建议进一步学习ES6+新特性、模块化、框架(React/Vue)等内容。祝你学习顺利!
版权声明:本文为原创教程,欢迎分享转发。