杰瑞科技汇

JavaScript教程该怎么学?

JavaScript 完整学习指南

目录

  1. 第一部分:JavaScript 是什么?

    JavaScript教程该怎么学?-图1
    (图片来源网络,侵删)
    • 简介
    • 它能做什么?
    • 它与 HTML 和 CSS 的关系
  2. 第二部分:准备工作

    • 工具:代码编辑器
    • 运行环境:浏览器控制台
  3. 第三部分:JavaScript 基础语法

    • script
    • 变量 (let, const, var)
    • 数据类型
    • 注释
    • 运算符
    • 条件语句 (if...else, switch)
    • 循环语句 (for, while)
  4. 第四部分:函数

    • 函数声明与表达式
    • 参数与返回值
    • 作用域
  5. 第五部分:对象与数组

    JavaScript教程该怎么学?-图2
    (图片来源网络,侵删)
    • 对象
    • 数组
    • 常用方法
  6. 第六部分:DOM 操作 - 让网页“活”起来

    • 什么是 DOM?
    • 选择元素
    • 与样式
    • 处理事件
  7. 第七部分:异步编程与 API

    • 什么是异步?
    • Promiseasync/await
    • Fetch API (从服务器获取数据)
  8. 第八部分:进阶概念

    • ES6+ 新特性简介
    • 错误处理 (try...catch)
    • 模块化
  9. 第九部分:学习路径与资源推荐

    • 学习路线图
    • 推荐教程与文档

第一部分:JavaScript 是什么?

简介

JavaScript (简称 JS) 是一种轻量级的、解释型的、或即时编译型的编程语言,它是一种基于原型、多范式的动态脚本语言,并且支持面向对象、命令式和声明式风格。

JavaScript 是网页的“行为层”,如果说 HTML 是网页的“骨架”(结构),CSS 是网页的“衣服”(样式),JavaScript 就是网页的“大脑和肌肉”(交互和逻辑)。

它能做什么?

  • 网页交互:响应用户操作,如点击按钮、填写表单、悬停效果等。
  • 更新:无需刷新页面,即可更新网页内容(社交媒体的动态加载)。
  • 表单验证:在用户提交数据前,检查输入是否合法。
  • 动画效果:创建复杂的网页动画和过渡效果。
  • 网络通信:与服务器进行数据交换(AJAX/Fetch),实现前后端分离的应用。
  • 服务器端开发:使用 Node.js,JavaScript 也可以用于编写服务器端代码。
  • 移动应用开发:使用 React Native, Flutter 等框架开发跨平台移动应用。

它与 HTML 和 CSS 的关系

  • HTML (HyperText Markup Language):定义网页的结构和内容。<h1> 是标题,<p> 是段落。
  • CSS (Cascading Style Sheets):负责网页的视觉表现,如颜色、布局、字体等。
  • JavaScript:负责网页的行为和逻辑,控制 HTML 和 CSS,实现动态效果。

这三者共同构成了现代网页的基石。


第二部分:准备工作

在学习 JavaScript 之前,你需要两个基本工具:

  1. 代码编辑器:一个专门用来编写代码的软件,它能提供语法高亮、自动补全等功能,极大提高开发效率。

  2. 运行环境:JavaScript 代码需要在环境中运行,最简单的方式就是使用浏览器自带的开发者工具

    • 打开开发者工具
      • 在 Chrome 或 Edge 浏览器中,按 F12 键,或者右键点击页面选择“检查”。
      • 点击 Console (控制台) 标签,这里是 JavaScript 代码的“游乐场”,你可以在这里直接输入代码并看到结果。

第三部分:JavaScript 基础语法

script

在 HTML 文件中引入 JavaScript 代码有两种主要方式:

  1. 内部脚本:直接在 HTML 文件中编写。

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>我的第一个 JS</title>
    </head>
    <body>
        <h1>你好,世界!</h1>
        <!-- 在这里写 JS 代码 -->
        <script>
            // 这里的代码会在页面加载时执行
            alert("欢迎来到 JavaScript 世界!");
        </script>
    </body>
    </html>
  2. 外部脚本(推荐):将代码写入一个 .js 文件,然后在 HTML 中引用。

    • 创建 script.js 文件:
      // script.js
      alert("这是来自外部文件的问候!");
    • 在 HTML 中引用:
      <script src="script.js"></script>

      注意:<script> 标签通常放在 <body> 的末尾,这样可以确保在脚本执行前,页面的 HTML 元素已经完全加载。

变量

变量是存储数据值的容器,ES6 推荐使用 letconst

  • let:用于声明可以重新赋值的变量。
    let message = "你好";
    message = "你好,世界!"; // 可以重新赋值
  • const:用于声明常量,一旦赋值就不能再改变。
    const PI = 3.14159;
    // PI = 4; // 这会报错
  • var:旧的声明方式,存在一些问题(如函数作用域和变量提升),不推荐在新的项目中使用

数据类型

JavaScript 是一种动态类型语言,变量的类型可以在运行时改变。

  • 字符串:文本,用单引号或双引号括起来。
    let name = "张三";
    let greeting = '你好';
  • 数字:整数或浮点数。
    let age = 25;
    let price = 99.99;
  • 布尔值truefalse,通常用于条件判断。
    let isStudent = true;
    let isWorking = false;
  • 未定义undefined,表示变量已声明但未赋值。
    let x;
    console.log(x); // 输出 undefined
  • 空值null,表示“空值”或“无值”。
    let data = null;
  • 对象:复杂数据类型,用于存储键值对集合。
    let person = { name: "李四", age: 30 };
  • 数组:用于存储有序的值列表。
    let colors = ["红色", "绿色", "蓝色"];

注释

注释是代码中不被执行的说明,用于解释代码。

  • 单行注释:
    // 这是一个单行注释
    let a = 1;
  • 多行注释:
    /*
    这是一个
    多行注释
    */
    let b = 2;

运算符

  • 算术运算符:, , , , (取余)
    console.log(10 + 5); // 15
    console.log(10 % 3); // 1
  • 赋值运算符:, , , etc.
    let x = 10;
    x += 5; // 等同于 x = x + 5; x 现在是 15
  • 比较运算符:, , , , >, <, >=, <=
    • 值相等 (会进行类型转换)
    • 值和类型都相等 (推荐使用)
      console.log(5 == "5");  // true
      console.log(5 === "5"); // false
  • 逻辑运算符&& (与), (或), (非)
    let sunny = true;
    let warm = false;
    console.log(sunny && warm); // false (
    console.log(sunny || warm); // true (或者)
    console.log(!sunny);        // false (非)

条件语句

根据不同的条件执行不同的代码。

  • if...else
    let hour = 20;
    if (hour < 12) {
        console.log("早上好!");
    } else if (hour < 18) {
        console.log("下午好!");
    } else {
        console.log("晚上好!");
    }
  • switch
    let day = "Monday";
    switch (day) {
        case "Monday":
            console.log("新的一周开始了。");
            break;
        case "Friday":
            console.log("周末快到了!");
            break;
        default:
            console.log("普通的一天。");
    }

循环语句

重复执行一段代码。

  • for 循环:在循环次数已知时使用。
    // 打印 0 到 4
    for (let i = 0; i < 5; i++) {
        console.log(i);
    }
  • while 循环:在条件为 true 时持续循环。
    let count = 0;
    while (count < 5) {
        console.log(count);
        count++; // 别忘了增加计数器,否则会无限循环
    }

第四部分:函数

函数是可以重复使用的代码块,用于执行特定的任务。

函数声明与表达式

  • 函数声明

    function greet(name) {
        return "你好, " + name + "!";
    }
  • 函数表达式 (更常见,特别是箭头函数)

    const greet = function(name) {
        return "你好, " + name + "!";
    };
    // ES6 箭头函数 - 更简洁
    const greetArrow = (name) => {
        return `你好, ${name}!`; // 使用模板字符串
    };
    // 如果函数体只有一行返回值,可以更简化
    const greetSimple = (name) => `你好, ${name}!`;

参数与返回值

  • 参数:函数的输入,在函数名后的括号中定义。
  • 返回值:函数的输出,使用 return 关键字返回,函数执行到 return 语句后会立即停止。
function add(a, b) {
    return a + b; // 返回 a 和 b 的和
}
let sum = add(5, 3);
console.log(sum); // 输出 8

作用域

作用域决定了变量和函数的可访问性。

  • 全局作用域:在任何地方都可以访问。

  • 函数作用域:在函数内部定义的变量,只能在函数内部访问。

    let globalVar = "我是全局变量";
    function myFunction() {
        let functionVar = "我是函数变量";
        console.log(globalVar); // 可以访问
        console.log(functionVar); // 可以访问
    }
    console.log(globalVar); // 可以访问
    // console.log(functionVar); // 报错!无法访问

第五部分:对象与数组

对象

对象是键值对的集合,用于存储更复杂的数据。

  • 创建对象

    let car = {
        brand: "Toyota",
        model: "Camry",
        year: 2025,
        start: function() {
            console.log("引擎启动!");
        }
    };
  • 访问属性和方法

    console.log(car.brand); // 使用点表示法
    console.log(car["model"]); // 使用方括号表示法(适用于属性名有空格或变量时)
    car.start(); // 调用方法
  • 修改属性

    car.year = 2025;
    console.log(car.year); // 2025

数组

数组用于存储有序的值列表。

  • 创建数组
    let fruits = ["苹果", "香蕉", "橙子"];
    let numbers = [1, 2, 3, 4, 5];
  • 访问元素
    console.log(fruits[0]); // 索引从 0 开始,输出 "苹果"
  • 修改元素
    fruits[1] = "葡萄";
    console.log(fruits); // ["苹果", "葡萄", "橙子"]

常用方法

  • 数组方法
    • push():在数组末尾添加一个或多个元素。
    • pop():删除并返回数组的最后一个元素。
    • shift():删除并返回数组的第一个元素。
    • unshift():在数组开头添加一个或多个元素。
    • length:获取数组的长度。
      let colors = ["红", "绿"];
      colors.push("蓝"); // colors 现在是 ["红", "绿", "蓝"]
      colors.pop();      // 返回 "蓝", colors 现在是 ["红", "绿"]
  • 对象方法
    • Object.keys():获取对象的所有键。
    • Object.values():获取对象的所有值。
      let user = { name: "王五", age: 28 };
      console.log(Object.keys(user)); // ["name", "age"]
      console.log(Object.values(user)); // ["王五", 28]

第六部分:DOM 操作 - 让网页“活”起来

DOM (Document Object Model) 是 HTML 和 XML 文档的编程接口,它将文档表示为一个树形结构,JavaScript 可以通过 DOM 来访问和修改文档的内容、结构和样式。

什么是 DOM?

当浏览器加载一个 HTML 页面时,它会将其转换成一个“文档对象模型”(DOM树),JavaScript 可以通过这个树来“触摸”和“操控”HTML 元素。

选择元素

在操作元素之前,首先要选中它。

  • getElementById():通过 ID 选择。
    <p id="intro">这是一个介绍。</p>
    let introElement = document.getElementById("intro");
  • querySelector():通过 CSS 选择器(最常用、最强大)。
    <p class="text">这是一段文本。</p>
    <ul>
        <li>项目1</li>
        <li>项目2</li>
    </ul>
    let firstText = document.querySelector(".text"); // 选择 class 为 "text" 的第一个元素
    let firstLi = document.querySelector("ul li"); // 选择 ul 下的第一个 li
  • querySelectorAll():选择所有匹配的元素,返回一个 NodeList(类数组)。
    let allLis = document.querySelectorAll("li"); // 选择所有的 li

与样式

    • element.textContent:获取或设置元素的文本内容(不解析 HTML 标签)。
    • element.innerHTML:获取或设置元素的 HTML 内容(会解析 HTML 标签)。
      let intro = document.getElementById("intro");
      intro.textContent = "文本内容已更新!";
      intro.innerHTML = "<strong>HTML 内容已更新!</strong>";
  • 修改样式
    • element.style.property:修改内联样式。
      let intro = document.getElementById("intro");
      intro.style.color = "blue";
      intro.style.fontSize = "20px";

处理事件

事件是用户或浏览器执行的某种动作,如点击、鼠标悬停、键盘按下等,我们可以让 JavaScript 监听这些事件并做出响应。

  • 添加事件监听器

    <button id="myButton">点击我</button>
    <p id="message"></p>
    let button = document.getElementById("myButton");
    let message = document.getElementById("message");
    button.addEventListener("click", function() {
        message.textContent = "按钮被点击了!";
        message.style.color = "green";
    });

    常见事件:click, mouseover, mouseout, keydown, load 等。


第七部分:异步编程与 API

什么是异步?

在 JavaScript 中,代码通常是同步执行的,即一行一行地按顺序执行,但有些操作(如网络请求、读取文件)可能需要很长时间,如果这些操作是同步的,整个程序就会被“阻塞”,页面会卡住。

异步编程允许程序在等待一个耗时操作完成的同时,继续执行其他任务,当耗时操作完成后,再回来处理它。

Promiseasync/await

Promise 是处理异步操作的现代方式,它代表了一个异步操作的最终完成(或失败)及其结果。async/await 是基于 Promise 的语法糖,让异步代码看起来更像同步代码,更易读。

  • Promise 基础

    • pending:进行中。
    • fulfilled:已成功。
    • rejected:已失败。
      // 创建一个 Promise
      let myPromise = new Promise(function(resolve, reject) {
      // 模拟一个异步操作,比如网络请求
      setTimeout(function() {
          let success = true; // 模拟成功或失败
          if (success) {
              resolve("操作成功!"); // 成功时调用 resolve
          } else {
              reject("操作失败!"); // 失败时调用 reject
          }
      }, 2000); // 2秒后执行
      });

    // 使用 Promise myPromise .then(function(result) { console.log(result); // 2秒后输出 "操作成功!" }) .catch(function(error) { console.log(error); // 如果失败,输出 "操作失败!" });

  • async/await (推荐) 你需要在函数前加上 async 关键字,然后在 Promise 前加上 await 关键字。

    async function fetchData() {
        try {
            console.log("开始获取数据...");
            // await 会暂停函数执行,直到 Promise 完成
            let result = await myPromise; 
            console.log("获取到的数据:", result);
        } catch (error) {
            console.log("发生错误:", error);
        }
    }
    fetchData();

Fetch API

fetch 是现代浏览器提供的用于网络请求的 API,它返回一个 Promise

示例:从公共 API 获取数据并显示在页面上。

  1. HTML

    <button id="getDataBtn">获取用户数据</button>
    <div id="userList"></div>
  2. JavaScript

    const button = document.getElementById("getDataBtn");
    const userList = document.getElementById("userList");
    button.addEventListener("click", async () => {
        try {
            // 使用 fetch 发送 GET 请求
            const response = await fetch('https://jsonplaceholder.typicode.com/users');
            // 检查请求是否成功
            if (!response.ok) {
                throw new Error('网络响应不正常');
            }
            // 将响应体解析为 JSON
            const users = await response.json();
            // 清空之前的内容
            userList.innerHTML = '';
            // 遍历用户数据并显示
            users.forEach(user => {
                const userElement = document.createElement('p');
                userElement.textContent = `${user.name} - ${user.email}`;
                userList.appendChild(userElement);
            });
        } catch (error) {
            console.error('获取数据时出错:', error);
            userList.innerHTML = `<p style="color: red;">获取数据失败: ${error.message}</p>`;
        }
    });

第八部分:进阶概念

ES6+ 新特性简介

现代 JavaScript (ECMAScript 6 及以后版本) 引入了许多强大的新特性。

  • 模板字符串:使用反引号 `,可以方便地嵌入变量。
    let name = "小明";
    let greeting = `你好, ${name}!`; // 比拼接字符串更优雅
  • 箭头函数:更简洁的函数语法。
    const add = (a, b) => a + b;
  • 解构赋值:从数组或对象中快速提取值。
    // 数组解构
    let [a, b] = [1, 2];
    // 对象解构
    let {name, age} = {name: "小红", age: 25};
  • 类 (Class):基于原型的面向对象编程的语法糖。
    class Animal {
        constructor(name) {
            this.name = name;
        }
        speak() {
            console.log(`${this.name} 发出声音,`);
        }
    }
    let dog = new Animal("旺财");
    dog.speak();

错误处理 (try...catch)

当代码中可能出现错误时,可以使用 try...catch 来捕获并处理它,而不是让整个程序崩溃。

try {
    // 尝试执行可能出错的代码
    let result = riskyOperation();
    console.log(result);
} catch (error) {
    // 如果出错,执行这里的代码
    console.error("发生了一个错误:", error.message);
} finally {
    // 无论是否出错,都会执行这里的代码
    console.log("清理工作...");
}

模块化

随着项目变大,将所有代码写在一个文件中会变得混乱,模块化允许你将代码分割成独立的、可重用的文件。

  • 导出 (export):在一个文件中,使用 export 关键字将函数、变量或类暴露给其他文件。
    • math.js
      export const add = (a, b) => a + b;
      export const PI = 3.14;
  • 导入 (import):在另一个文件中,使用 import 关键字引入其他模块的导出内容。
    • app.js
      import { add, PI } from './math.js';
      console.log(add(2, 3)); // 5
      console.log(PI);      // 3.14
    • 注意:要在 HTML 中使用模块,需要给 <script> 标签添加 type="module" 属性。
      <script type="module" src="app.js"></script>

第九部分:学习路径与资源推荐

学习路线图

  1. 打牢基础:精通本教程中的所有基础语法(变量、类型、函数、对象、数组、循环、条件)。
  2. DOM 操作:熟练使用 DOM API 来创建交互式网页,这是前端开发的核心技能。
  3. 异步编程:深入理解 Promiseasync/await,并熟练使用 Fetch API 进行数据请求。
  4. 学习一个框架:当基础扎实后,选择一个主流前端框架进行学习,如 React, Vue, 或 Angular,它们能帮你构建大型、复杂的应用。
  5. 工具链:学习使用构建工具(如 Webpack, Vite)和包管理器(如 npm, yarn)。
  6. 持续学习:关注社区动态,学习新的标准和最佳实践。

推荐教程与文档

也是最重要的建议:多写代码! 不要只看不练,尝试用 JavaScript 做一些小项目,比如待办事项列表、简单的计算器、天气应用等,在实践中遇到问题,然后去解决它,这是学习编程最快的方式,祝你学习顺利!

分享:
扫描分享到社交APP
上一篇
下一篇