JavaScript 核心进阶模块

数据交换格式(JSON)

JSON是一种文本数据格式,用于前后端传输数据,长得像 JavaScript 对象(或数组)。JSON 数据是纯文本格式(即string),可以被大多数编程语言解析和生成。

  • 支持两种主要结构

    • 对象:由键值对组成,用大括号 {} 包裹。

    • 数组:由有序的值组成,用方括号 [] 包裹。

  • 支持的数据类型

    • 字符串("string"

    • 数字(123

    • 布尔值(truefalse

    • 数组([1, 2, 3]

    • 对象({"key": "value"}

    • nullnull

JSON 不支持 undefinedInfinity-InfinityNaN 和函数等 JavaScript 特有的值。

类与对象的封装(class)

  • 类(Class)是面向对象编程(OOP)中的一个核心概念,它是用来创建对象的模板。(类比python)
  • 定义类的方法:使用 class 关键字来定义一个类,并通过 constructor 方法来定义类的构造函数(初始化对象时调用)。
    class Person {
      constructor(name, age) {
        this.name = name;  // 定义属性
        this.age = age;
      }
    
      greet() {
        console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
      }
    }
    
    const person1 = new Person("Alice", 30);
    person1.greet();  // 输出:Hello, my name is Alice and I'm 30 years old.
    
  • 类的实例是类的具体对象。通过 new 关键字,我们可以创建类的实例,并访问其属性和方法。
    const person2 = new Person("Bob", 25);
    person2.greet();  // 输出:Hello, my name is Bob and I'm 25 years old.
    

异步编程(Promise / async-await)

异步编程允许程序在执行某些耗时操作(例如读取文件、请求网络数据)时不阻塞后续代码的执行。它使得你的代码更加高效,尤其是在处理多个并发任务时。

JavaScript 的异步编程主要通过 回调函数Promisesasync/await 来实现。

  • Promise 是一种用于表示异步操作最终完成或失败的对象(object)
    let promise = new Promise((resolve, reject) => {
      let success = true;  // 模拟操作是否成功
      if (success) {
        resolve("操作成功!");
      } else {
        reject("操作失败!");
      }
    });
    
    promise
      .then(result => {
        console.log(result);  // 输出:操作成功!
      })
      .catch(error => {
        console.log(error);  // 输出:操作失败!(如果失败)
      });
    

    resolve():如果操作成功,调用它来改变 Promise 的状态为已解决。reject():如果操作失败,调用它来改变 Promise 的状态为已拒绝。then():用于处理 已解决 的 Promise,返回成功结果。catch():用于处理 已拒绝 的 Promise,捕获错误。

  • async:用于定义一个异步函数。它总是返回一个 Promise 对象。

  • await:只能在 async 函数中使用,它会暂停代码的执行,直到 Promise 完成,并返回结果。

模块化(Module)

模块化是为了拆分大文件、复用代码、避免变量冲突
在模块系统中,每个文件就是一个独立作用域的模块,可以导出想公开的东西,导入别的模块提供的内容。

export 是让一个模块(文件)里的变量或函数能“被外部使用”。

// utils.js
export const PI = 3.14;

export function add(a, b) {
  return a + b;
}
//PI值和函数add都被导出,可以被其他js文件导入

import则是从其他文件导入变量或函数

// main.js
import { PI, add } from './utils.js';

console.log(PI);           // 3.14
console.log(add(2, 3));    // 5

默认导出(default export

一个文件只能有一个默认导出,可以随意命名接收:

// sayHi.js
export default function sayHi(name) {
  console.log("你好", name);
}
// main.js
import greet from './sayHi.js';//这里的greet可以是任意的名字,都指代函数sayHi
greet("小明"); // 你好 小明

具名导出(named export

具名导出没有数量限制,导出的内容要放在{...}中

// hello.js
export default function () {
  console.log("默认导出函数");
}
export const name = "小明";
// main.js
import sayHello, { name } from './hello.js';

sayHello(); // 默认导出函数
console.log(name); // 小明

//这里sayHello是默认导出,{name}是具名导出,在这个例子中混合使用

浏览器交互基础(事件、DOM)

事件(events)

  • 事件是用户与页面互动时触发的行为(如点击、键盘输入)。

  • 通常用事件监听器addEventListener)用来绑定事件,触发事件时调用相应的回调函数。

    button.addEventListener('click', () => {
      console.log("按钮被点击了!");
    });
    //在js文件使用事件监听器

    也可以使用事件属性,直接在 HTML 标签内使用 onclick 等事件属性,通常不推荐,因为它限制了多个事件处理器,且不够灵活。

    <button onclick="alert('按钮被点击了!')">点击我</button>
  • 事件是异步的(比如点击一个按钮,按钮点击后,页面的其他代码可能先执行),JS 通过事件机制来管理用户交互。

DOM(Document Object Model,文档对象模型)

  • DOM 是 HTML 文档的编程接口,将网页表示为一棵树。它把网页的所有内容、结构和样式,抽象为一个对象模型,允许 JavaScript 动态地操作这些内容。

    html
     └── body
          └── div (id="container")
               └── p (Hello World!)
    
  • 每个 HTML 元素都是一个 节点(node),可以通过 JS 操作它们。html 是树的根节点,bodydivp 都是它的子节点。每个节点都可以访问其子节点、父节点、兄弟节点等。

  • 你可以获取、修改、删除、创建节点,通过这种方式操作网页内容、样式、事件等。

  • 通过 动态操作 DOM,网页可以响应用户的输入,实现交互效果。

浏览器控制技巧(BOM)

  • BOM(Browser Object Model)是浏览器提供的 一组 JavaScript 接口,它允许你操作浏览器本身(而不是网页的内容,网页内容通过DOM操作)。通过 BOM,JS 能访问和控制浏览器的窗口、历史、位置、屏幕等属性。

  • BOM 并没有标准,浏览器厂商可能会有不同的实现,但大部分功能都是通用的。

  • 例如,BOM可以使浏览器打开新窗口:

    // 打开新窗口
    window.open('https://www.csdn.net');
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值