ES6从入门到精通:其他特性

ES6 模块化

ES6 引入了标准的模块化系统,使用 importexport 语法。模块化可以拆分代码为多个文件,便于维护和复用。

导出模块:

javascript 复制代码
// math.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;

导入模块:

javascript 复制代码
// app.js
import { add, subtract } from './math.js';
console.log(add(2, 3)); // 5

默认导出:

javascript 复制代码
// math.js
export default function multiply(a, b) {
  return a * b;
}

导入默认导出:

javascript 复制代码
// app.js
import multiply from './math.js';
console.log(multiply(2, 3)); // 6

箭头函数

箭头函数提供更简洁的函数语法,并且没有自己的 thisargumentssupernew.target

基本语法:

javascript 复制代码
const add = (a, b) => a + b;

单参数可省略括号:

javascript 复制代码
const square = x => x * x;

无参数需保留括号:

javascript 复制代码
const greet = () => console.log('Hello');

多行函数体需用大括号:

javascript 复制代码
const sum = (a, b) => {
  const result = a + b;
  return result;
};

模板字符串

模板字符串使用反引号(`)定义,支持多行文本和嵌入表达式。

基本用法:

javascript 复制代码
const name = 'Alice';
const greeting = `Hello, ${name}!`;
console.log(greeting); // Hello, Alice!

多行文本:

javascript 复制代码
const message = `
  This is a
  multi-line
  string.
`;

表达式嵌入:

javascript 复制代码
const a = 5;
const b = 10;
console.log(`The sum is ${a + b}`); // The sum is 15

解构赋值

解构赋值可以从数组或对象中提取数据并赋值给变量。

数组解构:

javascript 复制代码
const numbers = [1, 2, 3];
const [first, second, third] = numbers;
console.log(first); // 1

对象解构:

javascript 复制代码
const person = { name: 'Bob', age: 30 };
const { name, age } = person;
console.log(name); // Bob

默认值:

javascript 复制代码
const { name = 'Anonymous', age = 20 } = {};
console.log(name); // Anonymous

重命名:

javascript 复制代码
const { name: personName, age: personAge } = person;
console.log(personName); // Bob

扩展运算符与剩余参数

扩展运算符(...)可用于展开数组或对象,剩余参数用于收集多个参数为数组。

数组展开:

javascript 复制代码
const arr1 = [1, 2, 3];
const arr2 = [...arr1, 4, 5];
console.log(arr2); // [1, 2, 3, 4, 5]

对象展开:

javascript 复制代码
const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1, c: 3 };
console.log(obj2); // { a: 1, b: 2, c: 3 }

剩余参数:

javascript 复制代码
function sum(...numbers) {
  return numbers.reduce((acc, num) => acc + num, 0);
}
console.log(sum(1, 2, 3)); // 6

类与继承

ES6 引入了 class 语法,简化了原型继承的实现。

类定义:

javascript 复制代码
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    console.log(`Hello, my name is ${this.name}`);
  }
}

继承:

javascript 复制代码
class Student extends Person {
  constructor(name, age, grade) {
    super(name, age);
    this.grade = grade;
  }

  study() {
    console.log(`${this.name} is studying`);
  }
}

Promise 与异步

Promise 用于处理异步操作,避免回调地狱。

基本用法:

javascript 复制代码
const fetchData = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('Data fetched');
    }, 1000);
  });
};

fetchData()
  .then(data => console.log(data))
  .catch(error => console.error(error));

async/await 语法:

javascript 复制代码
async function getData() {
  try {
    const data = await fetchData();
    console.log(data);
  } catch (error) {
    console.error(error);
  }
}

集合与映射

SetMap 提供了新的数据结构。

Set 用法:

javascript 复制代码
const uniqueNumbers = new Set([1, 2, 2, 3]);
console.log(uniqueNumbers); // Set {1, 2, 3}

Map 用法:

javascript 复制代码
const map = new Map();
map.set('name', 'Alice');
map.set('age', 25);
console.log(map.get('name')); // Alice

迭代器与生成器

迭代器协议允许自定义对象的迭代行为,生成器函数简化了迭代器的创建。

迭代器:

javascript 复制代码
const iterable = {
  [Symbol.iterator]() {
    let step = 0;
    return {
      next() {
        step++;
        return { value: step, done: step > 3 };
      }
    };
  }
};

for (const value of iterable) {
  console.log(value); // 1, 2, 3
}

生成器:

javascript 复制代码
function* generator() {
  yield 1;
  yield 2;
  yield 3;
}

const gen = generator();
console.log(gen.next().value); // 1

代理与反射

ProxyReflect 提供了元编程能力。

Proxy 用法:

javascript 复制代码
const target = {};
const handler = {
  get(target, prop) {
    return prop in target ? target[prop] : 'default';
  }
};

const proxy = new Proxy(target, handler);
console.log(proxy.name); // default

Reflect 用法:

javascript 复制代码
const obj = { a: 1 };
console.log(Reflect.get(obj, 'a')); // 1
相关推荐
代码老y7 分钟前
十年回望:Vue 与 React 的设计哲学、演进轨迹与生态博弈
前端·vue.js·react.js
一条上岸小咸鱼13 分钟前
Kotlin 基本数据类型(五):Array
android·前端·kotlin
zzywxc78716 分钟前
详细探讨AI在金融、医疗、教育和制造业四大领域的具体落地案例,并通过代码、流程图、Prompt示例和图表等方式展示这些应用的实际效果。
开发语言·javascript·人工智能·深度学习·金融·prompt·流程图
大明8816 分钟前
用 mouseover/mouseout 事件代理模拟 mouseenter/mouseleave
前端·javascript
小杨梅君18 分钟前
vue3+vite中使用自定义element-plus主题配置
前端·element
一个专注api接口开发的小白23 分钟前
Python + 淘宝 API 开发:自动化采集商品数据的完整流程
前端·数据挖掘·api
林太白23 分钟前
Nuxt.js搭建一个官网如何简单
前端·javascript·后端
晴空雨24 分钟前
一个符号让 indexOf 判断更优雅!JavaScript 位运算的隐藏技巧
前端·javascript
摸着石头过河的石头24 分钟前
前端调试全攻略:从PC到移动端的一站式实战指南
前端·debug
小猪猪屁26 分钟前
🚀 用 Nuxt3 打造公司官网:一场从 0 到 1 的实战冒险
前端