JavaScript 全能教程:从入门到实践
目录
-
(图片来源网络,侵删)- 什么是 JavaScript?
- 它能做什么?
- 如何在你的第一个网页中运行 JavaScript?
-
- 变量
- 数据类型
- 运算符
- 条件语句
- 循环
- 函数
-
- 什么是 DOM?
- 选择元素
- 、样式和属性
- 创建和添加元素
- 事件监听
-
- 对象
- 数组
- 作用域与闭包
- 异步编程:回调、Promise 与 Async/Await
- ES6+ 新特性简介
-
(图片来源网络,侵删)- 推荐网站与书籍
- 开发工具
- 编码规范与调试技巧
第一部分:初识 JavaScript
什么是 JavaScript?
JavaScript 是一种轻量级、解释型的编程语言,它最初是为了在网页中实现交互而设计的,但现在它的应用范围已经远远超出了浏览器,可以用于服务器端开发(Node.js)、移动应用开发等。
- HTML 定义了网页的结构(骨架)。
- CSS 定义了网页的样式(外观)。
- JavaScript 定义了网页的行为(动作和交互)。
它能做什么?
JavaScript 可以让你的网页变得生动有趣:
- 响应用户操作:点击按钮、填写表单、鼠标悬停等。
- 动态修改页面内容:无需刷新页面即可更新信息。
- 动画效果:制作平滑的过渡、滚动效果等。
- 网络通信:与服务器交换数据,实现异步加载(搜索框实时提示)。
- 本地存储:在用户的浏览器中保存数据(如用户偏好设置)。
如何在你的第一个网页中运行 JavaScript?
最简单的方式是直接在 HTML 文件中编写 步骤: 变量是存储数据值的容器,现代 JavaScript 推荐使用 JavaScript 是一种动态类型语言,变量的类型由其值决定。 用于执行操作的数据。 根据不同的条件执行不同的代码。 重复执行一段代码。 可重复使用的代码块。 DOM (Document Object Model) 是浏览器将 HTML 文档转换成一个树状结构,JavaScript 可以通过这个结构来访问和修改网页的每一个部分。 : let div = document.querySelector(".info-box");
div.innerHTML = " 这是一段 新的 HTML 内容。<script>
index.html。<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">我的第一个 JS 程序</title>
</head>
<body>
<h1>你好,世界!</h1>
<p>打开浏览器的开发者工具(按 F12),在 Console(控制台)中查看输出。</p>
<!-- 在这里编写 JavaScript 代码 -->
<script>
// 这是一行 JavaScript 注释,代码不会执行它
// 使用 console.log() 在控制台打印信息
console.log("Hello, JavaScript!");
console.log("欢迎来到编程世界!");
// 也可以在网页上弹出一个提示框(不推荐频繁使用)
alert("你好,JavaScript!");
</script>
</body>
</html>
F12 或 Ctrl+Shift+I (Windows) / Cmd+Opt+I (Mac) 打开开发者工具,切换到 Console 标签,你将看到打印出的信息。
第二部分:JavaScript 基础
变量
let 和 const 来声明变量。
let:声明一个可重新赋值的变量。const:声明一个常量,一旦赋值就不能再改变。let myName = "张三"; // 可以改变 myName 的值
myName = "李四";
console.log(myName); // 输出: 李四
const PI = 3.14159; // 不能改变 PI 的值
// PI = 4; // 这行代码会报错
数据类型
let greeting = "你好";
let age = 25;
let price = 99.99;
true 或 false,通常用于条件判断。let isStudent = true;
let fruits = ["苹果", "香蕉", "橙子"];
console.log(fruits[0]); // 输出: 苹果
let person = {
name: "王五",
age: 30,
city: "北京"
};
console.log(person.name); // 输出: 王五
null:表示“空”或“无值”。let data = null;
undefined:表示变量已声明但未赋值。运算符
let sum = 10 + 5; // 15
let remainder = 10 % 3; // 1
>, <, >=, <=let x = 5;
console.log(x == "5"); // true (只比较值)
console.log(x === "5"); // false (值和类型都不同)
&& (与), (或), (非)let a = true, b = false;
console.log(a && b); // false
console.log(a || b); // true
console.log(!a); // false
条件语句
if...elselet score = 85;
if (score >= 90) {
console.log("优秀");
} else if (score >= 60) {
console.log("及格");
} else {
console.log("不及格");
}
switchlet day = "周一";
switch (day) {
case "周一":
console.log("新的一周开始了");
break;
case "周五":
console.log("周末快到了");
break;
default:
console.log("普通的一天");
}
循环
for 循环:当你知道循环次数时使用。for (let i = 0; i < 5; i++) {
console.log("这是第 " + (i + 1) + " 次循环");
}
while 循环:当某个条件为 true 时,持续循环。let count = 0;
while (count < 5) {
console.log("Count is: " + count);
count++; // 别忘了增加计数器,否则会死循环!
}
函数
// 定义一个函数
function greet(name) {
// name 是参数
return "你好, " + name + "!";
}
// 调用函数
let message = greet("小明");
console.log(message); // 输出: 你好, 小明!
// 箭头函数 (ES6 写法,更简洁)
const add = (a, b) => {
return a + b;
};
// 或者更简洁
const multiply = (a, b) => a * b;
console.log(add(3, 4)); // 输出: 7
console.log(multiply(3, 4)); // 输出: 12
第三部分:DOM 操作 - 让网页“活”起来
选择元素
getElementById(): 通过 ID 选择,返回单个元素。let header = document.getElementById("main-header");
querySelector(): 通过 CSS 选择器选择,返回第一个匹配的元素。非常常用!let firstParagraph = document.querySelector("p");
let box = document.querySelector(".box"); // 通过类名选择
querySelectorAll(): 通过 CSS 选择器选择所有匹配的元素,返回一个 NodeList (类数组)。let allLinks = document.querySelectorAll("a");
、样式和属性
element.textContent: 修改元素的文本内容(安全,会忽略 HTML 标签)。element.innerHTML: 修改元素的 HTML 内容(不安全,如果内容来自用户,有 XSS 风险)。
let title = document.querySelector("h1");textContent = "标题被修改了!";
修改样式:
let button = document.querySelector("button");
button.style.backgroundColor = "blue";
button.style.color = "white";
button.style.padding = "10px";
修改属性:
let link = document.querySelector("a");
link.href = "https://www.google.com";
link.target = "_blank";
创建和添加元素
// 1. 创建一个新的 <p> 元素
let newParagraph = document.createElement("p");
// 2. 给它添加内容
newParagraph.textContent = "这是动态创建的段落。";
// 3. 找到要添加到的父元素
let body = document.body;
// 4. 将新元素添加到父元素的末尾
body.appendChild(newParagraph);
事件监听
让代码对用户的操作做出反应。
let myButton = document.querySelector("#my-button");
myButton.addEventListener("click", function() {
alert("按钮被点击了!");
});
// 或者使用箭头函数
myButton.addEventListener("mouseover", () => {
console.log("鼠标移到了按钮上");
});
常用事件:click, mouseover, mouseout, keydown, keyup, load 等。
第四部分:进阶概念
对象
JavaScript 中的万物皆对象,对象是键值对的集合,用于存储复杂的数据。
// 创建一个对象字面量
let car = {
brand: "Toyota",
model: "Corolla",
year: 2025,
start: function() {
console.log("引擎启动了!");
}
};
// 访问属性
console.log(car.brand); // Toyota
// 调用方法
car.start(); // 引擎启动了!
// 添加新属性
car.color = "白色";
数组
数组是一种特殊的对象,用于存储有序的列表。
let colors = ["red", "green", "blue"];
// 常用方法
colors.push("yellow"); // 添加到末尾
colors.pop(); // 删除最后一个元素
colors.shift(); // 删除第一个元素
colors.unshift("black"); // 添加到开头
console.log(colors.length); // 数组长度
// 遍历数组
colors.forEach(color => {
console.log(color);
});
// map() 方法:创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后的返回值
let upperColors = colors.map(color => color.toUpperCase());
console.log(upperColors); // ["RED", "GREEN", "BLUE", "YELLOW"]
作用域与闭包
- 作用域:变量可以访问的范围,JavaScript 有全局作用域和函数作用域(ES6 的
let和const还支持块级作用域 )。 - 闭包:函数和其周围的状态(词法环境)的引用捆绑在一起,换句话说,闭包让你可以从内部函数访问外部函数的作用域。
一个经典的闭包例子:
function outerFunction(x) {
// x 在这里被定义
return function innerFunction(y) {
// innerFunction "记住了" x 的值
return x + y;
};
}
let add5 = outerFunction(5); // add5 现在是一个函数,它 "quot; 了 x=5
console.log(add5(3)); // 输出 8
console.log(add5(10)); // 输出 15
异步编程
JavaScript 是单线程的,为了不阻塞主线程(比如等待网络请求),引入了异步编程。
-
回调函数:将一个函数作为参数传递给另一个函数,在任务完成后执行。
setTimeout(() => { console.log("3秒后执行"); }, 3000);缺点:容易形成“回调地狱”(Callback Hell),代码难以维护。
-
Promise:代表一个异步操作的最终完成(或失败)及其结果值,它有三种状态:
pending(进行中),fulfilled(已成功),rejected(已失败)。function fetchData() { return new Promise((resolve, reject) => { setTimeout(() => { // 模拟成功 resolve("数据获取成功!"); // 模拟失败 // reject("出错了!"); }, 1000); }); } fetchData() .then(data => console.log(data)) // .then 用于处理成功 .catch(error => console.error(error)); // .catch 用于处理失败 -
Async/Await:是 Promise 的语法糖,让异步代码看起来像同步代码一样,更易于理解和编写。
async function getData() { try { let data = await fetchData(); // 等待 Promise 完成 console.log(data); } catch (error) { console.error(error); } } getData();
第五部分:学习资源与最佳实践
推荐网站与书籍
- MDN Web Docs (Mozilla Developer Network): https://developer.mozilla.org/zh-CN/docs/Web/JavaScript
- 必看! 最权威、最全面的 JavaScript 参考文档和教程。
- JavaScript.info: https://zh.javascript.info/
现代化的、非常详细的 JavaScript 教程,从基础到高级一应俱全。
- W3Schools: https://www.w3schools.com/js/
简单易懂,适合快速入门和查询。
- 《JavaScript高级程序设计》(红宝书): 经典中的经典,适合深入理解语言细节。
- 《你不知道的JavaScript》(系列): 深入探讨语言核心概念,如作用域、闭包等。
开发工具
- 浏览器开发者工具 (F12): 你的好朋友!
- Elements: 查看和修改 HTML/CSS。
- Console: 查看日志、运行代码。
- Sources: 断点调试 JavaScript 代码。
- Network: 查看网络请求。
- 代码编辑器:
- Visual Studio Code (VS Code): 免费、强大、插件丰富,是目前最流行的选择。
- Sublime Text: 轻量、快速。
- WebStorm: 功能强大的 IDE,但收费。
编码规范与调试技巧
- 使用
const和let: 永远不要使用var。 - 有意义的命名: 变量名、函数名要清晰表达其用途。
- 添加注释: 解释复杂的逻辑。
- 格式化代码: 保持代码整洁,使用 Prettier 等工具自动格式化。
- 调试技巧:
console.log()是最简单的调试方法。- 学会使用
debugger;语句在代码中设置断点。 - 学会使用浏览器开发者工具的 Sources 面板进行断点调试。
学习 JavaScript 是一个循序渐进的过程,从基础语法开始,然后通过 DOM 操作让网页动起来,再逐步深入到对象、异步等进阶概念,最重要的是多写代码、多动手实践,尝试去实现一些小项目,比如待办事项列表、简单的计算器、天气查询应用等,祝你学习愉快!
