ES6一些主要的知识点及其用法

发布于:2025-03-12 ⋅ 阅读:(12) ⋅ 点赞:(0)

以下是 ECMAScript 6(ES6)中一些主要的知识点及其用法:

---

**1. 变量声明**
**1.1 let 和 const**
- **用法**:  
  - `let` 用于声明块作用域的变量,变量可以重新赋值。  
  - `const` 用于声明常量,变量不可更改。
- **示例**:  
  ```javascript
  let name = 'Alice';
  name = 'Bob'; // 正确
  const PI = 3.14159;
  PI = 2; // 错误,常量不可修改
  ```

 **1.2 块作用域**
- **用法**:  
  在 `let` 和 `const` 中,变量只能在声明的块中访问。
- **示例**:  
  ```javascript
  {
    let x = 10;
  }
  console.log(x); // ReferenceError: x is not defined
  ```

 **2. 函数**
 **2.1 箭头函数(Arrow Functions)**
- **用法**:  
  简化函数表达式, lexical `this` 绑定。
- **示例**:  
  ```javascript
  const sum = (a, b) => a + b;
  console.log(sum(2, 3)); // 输出:5
  ```

**2.2 默认参数**
- **用法**:  
  为函数参数设置默认值。
- **示例**:  
  ```javascript
  function greet(name = 'guest') {
    console.log(`Hello, ${name}!`);
  }
  greet(); // 输出:Hello, guest!
  ```

 **2.3 剩余参数**
- **用法**:  
  将多个参数合并为数组。
- **示例**:  
  ```javascript
  function sum(...nums) {
    return nums.reduce((acc, num) => acc + num, 0);
  }
  console.log(sum(1, 2, 3)); // 输出:6
  ```

**2.4 函数表达式中的理解属性**
- **用法**:  
  简化函数表达式,避免重复写属性名。
- **示例**:  
  ```javascript
  const user = {
    name: 'John',
    age: 30,
    greet() {
      console.log('Hello!');
    }
  };
  ```

---

 **3. 数组**
**3.1 数组解构**
- **用法**:  
  快速提取数组中的值并赋值给变量。
- **示例**:  
  ```javascript
  const arr = [1, 2, 3];
  const [a, b] = arr;
  console.log(a, b); // 输出:1 2
  ```

 **3.2 展开运算符**
- **用法**:  
  展开数组中的元素。
- **示例**:  
  ```javascript
  const arr1 = [1, 2];
  const arr2 = [3, 4];
  const combined = [...arr1, ...arr2];
  console.log(combined); // 输出:[1, 2, 3, 4]
  ```

、 **3.3 find() 和 findIndex()**
- **用法**:  
  在数组中查找满足条件的元素。
- **示例**:  
  ```javascript
  const arr = [1, 2, 3, 4];
  const result = arr.find((num) => num > 2);
  console.log(result); // 输出:3
  ```

 **3.4 数组的 for...of 循环**
- **用法**:  
  遍历数组或其他可迭代对象。
- **示例**:  
  ```javascript
  const arr = [1, 2, 3];
  for (const num of arr) {
    console.log(num);
  }
  // 输出:
  // 1
  // 2
  // 3
  ```

---

 **4. 对象**
 **4.1 对象字面量增强**
- **用法**:  
  简化对象属性的定义。
- **示例**:  
  ```javascript
  const name = 'John';
  const age = 30;
  const user = { name, age };
  console.log(user); // 输出:{ name: 'John', age: 30 }
  ```

 **4.2 对象解构**
- **用法**:  
  从对象中提取属性并赋值给变量。
- **示例**:  
  ```javascript
  const user = { name: 'John', age: 30 };
  const { name, age } = user;
  console.log(name, age); // 输出:John 30
  ```

**4.3 对象的 Symbol 类型**
- **用法**:  
  创建唯一的属性键。
- **示例**:  
  ```javascript
  const key = Symbol('key');
  const obj = {};
  obj[key] = 'value';
  console.log(obj[key]); // 输出:value
  ```

**4.4 Proxy**
- **用法**:  
  创建一个代理对象,控制对目标对象的访问。
- **示例**:  
  ```javascript
  const target = {};
  const proxy = new Proxy(target, {
    get: (obj, prop) => {
      return obj[prop] ?? '属性不存在';
    }
  });
  console.log(proxy.name); // 输出:属性不存在
  ```

 **4.5 模块化**
- **用法**:  
  导入和导出模块。
- **示例**:  
  ```javascript
  // math.js
  export function add(a, b) {
    return a + b;
  }
  // main.js
  import { add } from './math.js';
  console.log(add(1, 2)); // 输出:3
  ```

---

**5. 异步操作**
 **5.1 Promise**
- **用法**:  
  处理异步操作,代替回调函数。
- **示例**:  
  ```javascript
  const promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve('异步操作完成'), 2000);
  });
  promise.then((result) => console.log(result)); // 输出:异步操作完成
  ```

 **5.2 async/await**
- **用法**:  
  简化 Promise 的使用,使代码看起来像同步代码。
- **示例**:  
  ```javascript
  async function asyncFunc() {
    const result = await new Promise((resolve) => {
      setTimeout(() => resolve('完成'), 1000);
    });
    console.log(result); // 输出:完成
  }
  asyncFunc();
  ```

---

 **6. 类**
 **6.1 类的定义**
- **用法**:  
  使用 `class` 关键字定义类。
- **示例**:  
  ```javascript
  class Person {
    constructor(name, age) {
      this.name = name;
      this.age = age;
    }
    greet() {
      console.log(`Hello, my name is ${this.name}!`);
    }
  }
  const p = new Person('Alice', 25);
  p.greet(); // 输出:Hello, my name is Alice!
  ```

**6.2 类的继承**
- **用法**:  
  使用 `extends` 关键字实现继承。
- **示例**:  
  ```javascript
  class Animal {
    constructor(name) {
      this.name = name;
    }
    eat() {
      console.log(`${this.name} is eating.`);
    }
  }
  class Dog extends Animal {
    constructor(name, breed) {
      super(name);
      this.breed = breed;
    }
    bark() {
      console.log(`${this.name} is barking.`);
    }
  }
  const dog = new Dog('Buddy', 'Golden Retriever');
  dog.eat(); // 输出:Buddy is eating.
  ```

**6.3 静态方法**
- **用法**:  
  定义属于类本身的方法。
- **示例**:  
  ```javascript
  class MathUtil {
    static add(a, b) {
      return a + b;
    }
  }
  console.log(MathUtil.add(1, 2)); // 输出:3
  ```

 **6.4 Getter 和 Setter**
- **用法**:  
  控制属性的访问和修改。
- **示例**:  
  ```javascript
  class Person {
    constructor(name) {
      this._name = name;
    }
    get name() {
      return this._name;
    }
    set name(value) {
      this._name = value.toUpperCase();
    }
  }
  const p = new Person('john');
  console.log(p.name); // 输出:john
  p.name = 'alice';
  console.log(p.name); // 输出:ALICE
  ```

---

**7. Set 和 Map**
**7.1 Set**
- **用法**:  
  存储唯一的集合。
- **示例**:  
  ```javascript
  const s = new Set();
  s.add(1);
  s.add(1); // 重复添加不会报错
  console.log(s.size); // 输出:1
  console.log(s.has(1)); // 输出:true
  ```

**7.2 Map**
- **用法**:  
  存储键值对。
- **示例**:  
  ```javascript
  const m = new Map();
  m.set('name', 'John');
  console.log(m.get('name')); // 输出:John
  console.log(m.has('name')); // 输出:true
  ```

---

**8. 异步迭代器和 for...await**
- **用法**:  
  遍历异步生成的序列。
- **示例**:  
  ```javascript
  async function* asyncGenerator() {
    yield 1;
    await new Promise(resolve => setTimeout(resolve, 1000));
    yield 2;
    await new Promise(resolve => setTimeout(resolve, 1000));
    yield 3;
  }
  async function main() {
    for await (const num of asyncGenerator()) {
      console.log(num);
    }
  }
  main(); // 输出:1, 2, 3(每隔一秒输出一次)
  ```

---

 **9. Promise.all 和 Promise.race**
- **用法**:  
  处理多个 Promise。
- **示例**:  
  ```javascript
  Promise.all([Promise.resolve(1), Promise.resolve(2)])
    .then(results => console.log(results)); // 输出:[1, 2]
  Promise.race([Promise.resolve(1), Promise.resolve(2)])
    .then(result => console.log(result)); // 输出:1
  ```

---

**10. 解构赋值**
- **用法**:  
  从数组或对象中提取值并赋值给变量。
- **示例**:  
  ```javascript
  const arr = [1, 2, 3];
  const [a, b, c] = arr;
  console.log(a, b, c); // 输出:1 2 3
  ```

---

**11. 迭代协议(Iterator Protocol)**
- **用法**:  
  定义对象的迭代行为。
- **示例**:  
  ```javascript
  const iterable = {
    [Symbol.iterator]() {
      let i = 0;
      return {
        next() {
          if (i < 3) {
            return { value: i++, done: false };
          }
          return { value: undefined, done: true };
        }
      };
    }
  };
  for (const num of iterable) {
    console.log(num); // 输出:0, 1, 2
  }
  ```

---

 **12. 生成器(Generator)**
- **用法**:  
  使用 `function*` 创建生成器函数,实现协程。
- **示例**:  
  ```javascript
  function* generatorFunc() {
    yield 1;
    yield 2;
    return 3;
  }
  const gen = generatorFunc();
  console.log(gen.next().value); // 输出:1
  console.log(gen.next().value); // 输出:2
  console.log(gen.next().value); // 输出:3
  ```

---

 **13. 子类化内置对象**
- **用法**:  
  扩展内置对象(如 Array)。
- **示例**:  
  ```javascript
  class MyArray extends Array {
    constructor(...args) {
      super(...args);
    }
    sum() {
      return this.reduce((acc, num) => acc + num, 0);
    }
  }
  const arr = new MyArray(1, 2, 3);
  console.log(arr.sum()); // 输出:6
  ```

---

**14. 对象的 \[\[OwnPropertyKeys]]**
- **用法**:  
  自定义对象的属性枚举。
- **示例**:  
  ```javascript
  const obj = {};
  Object.defineProperty(obj, 'a', { value: 1, enumerable: true });
  Object.defineProperty(obj, 'b', { value: 2, enumerable: false });
  console.log(Object.keys(obj)); // 输出:['a']
  ```

---

这些是 ES6 中的一些主要知识点及其用法,涵盖了变量声明、函数、数组、对象、类、异步操作等多个方面。通过这些特性,可以让 JavaScript 代码更加简洁、可读和高效。