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
相关推荐
编程猪猪侠27 分钟前
Tailwind CSS 自定义工具类与主题配置指南
前端·css
qhd吴飞31 分钟前
mybatis 差异更新法
java·前端·mybatis
YGY Webgis糕手之路1 小时前
OpenLayers 快速入门(九)Extent 介绍
前端·经验分享·笔记·vue·web
患得患失9491 小时前
【前端】【vueDevTools】使用 vueDevTools 插件并修改默认打开编辑器
前端·编辑器
ReturnTrue8681 小时前
Vue路由状态持久化方案,优雅实现记住表单历史搜索记录!
前端·vue.js
UncleKyrie1 小时前
一个浏览器插件帮你查看Figma设计稿代码图片和转码
前端
遂心_1 小时前
深入解析前后端分离中的 /api 设计:从路由到代理的完整指南
前端·javascript·api
你听得到111 小时前
Flutter - 手搓一个日历组件,集成单日选择、日期范围选择、国际化、农历和节气显示
前端·flutter·架构
风清云淡_A1 小时前
【REACT18.x】CRA+TS+ANTD5.X封装自定义的hooks复用业务功能
前端·react.js
@大迁世界1 小时前
第7章 React性能优化核心
前端·javascript·react.js·性能优化·前端框架