ES6 特性

ES6(ECMAScript 2015)引入了许多新特性,使得 JavaScript 更加现代化、简洁和强大。以下是一些常用的 ES6 特性:

1. letconst 声明变量

let 用于声明块级作用域的变量,避免了 var 可能引起的作用域问题。

const 用于声明常量,声明后无法重新赋值。

javascript 复制代码
let x = 10; x = 20; // 允许修改 const y = 30; y = 40; // 错误,常量不可修改

2. 箭头函数 (=>)

箭头函数使函数的定义更加简洁,并且没有自己的 this,它会继承外部函数的 this

javascript 复制代码
const add = (a, b) => a + b; setTimeout(() => { console.log('Hello'); }, 1000);

3. 模板字符串(Template Literals)

使用反引号(`````)创建字符串,可以嵌入表达式和多行字符串。

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

let multiLine = `This is
a multi-line
string.`;
console.log(multiLine);

4. 解构赋值(Destructuring)

可以将数组或对象的值解构到变量中,简化代码。

数组解构:
javascript 复制代码
let [a, b] = [1, 2];
console.log(a, b); // 1 2
对象解构:
javascript 复制代码
let {name, age} = {name: "John", age: 30};
console.log(name, age); // "John" 30

5. 默认参数(Default Parameters)

函数的参数可以设置默认值,当未传入参数时,使用默认值。

javascript 复制代码
function greet(name = "Guest") {
  console.log(`Hello, ${name}!`);
}
greet(); // "Hello, Guest!"
greet("Alice"); // "Hello, Alice!"

6. 扩展运算符(Spread Operator)

用于展开数组或对象,或者将多个元素合并成一个新数组或对象。

数组扩展:
javascript 复制代码
let arr1 = [1, 2, 3];
let arr2 = [...arr1, 4, 5];
console.log(arr2); // [1, 2, 3, 4, 5]
对象扩展:
javascript 复制代码
let obj1 = {a: 1, b: 2};
let obj2 = {...obj1, c: 3};
console.log(obj2); // {a: 1, b: 2, c: 3}

7. 类(Class)

ES6 引入了面向对象编程的类(class)语法。

constructor是 构造器 构造对象

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

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

let person = new Person("Alice", 30);
person.greet(); 

8. Promise

Promise 用于处理异步操作,避免了回调地狱(callback hell)。

javascript 复制代码
let promise = new Promise((resolve, reject) => {
  let success = true;
  if (success) {
    resolve("Data received");
  } else {
    reject("Error occurred");
  }
});

promise
  .then(data => console.log(data))  // "Data received"
  .catch(error => console.log(error));  // "Error occurred"

9. 模块化(Modules)

  • ES6 引入了 importexport 语法,使得 JavaScript 更加模块化,方便代码分割和复用。
导出模块:
javascript 复制代码
// math.js
export const add = (a, b) => a + b;
export const multiply = (a, b) => a * b;
导入模块:
javascript 复制代码
// app.js
import { add, multiply } from './math.js';
console.log(add(1, 2));  // 3
console.log(multiply(2, 3));  // 6

10. 符号(Symbols)

Symbol 是一种新的原始数据类型,用于创建唯一的值,常用于对象属性的唯一标识。

javascript 复制代码
let sym = Symbol("description");
let obj = {
  [sym]: "This is a symbol property"
};
console.log(obj[sym]); // "This is a symbol property"

11. 生成器(Generators)

生成器函数使用 function* 声明,并通过 yield 关键字返回值。生成器可以暂停和恢复执行,适合处理异步操作或大数据流。

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

let gen = generator();
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3

12. Set 和 Map

Set 是一个无重复元素的集合,Map 是一个键值对集合,可以用于更高效地存储和查找数据。

javascript 复制代码
let set = new Set([1, 2, 3]);
set.add(4);
set.add(3);  // 不会添加重复元素
console.log(set); // Set { 1, 2, 3, 4 }

let map = new Map();
map.set("name", "Alice");
map.set("age", 30);
console.log(map.get("name")); // "Alice"
console.log(map.size); // 2

13. 异步函数(async / await

asyncawait 用于简化异步操作,避免回调地狱。

javascript 复制代码
async function fetchData() {
  let data = await fetch('https://api.example.com');
  let json = await data.json();
  console.log(json);
}

这些是 ES6 的一些常用特性,学习和掌握这些特性会帮助你编写更简洁、可维护和高效的 JavaScript 代码。

相关推荐
拾光拾趣录9 分钟前
for..in 和 Object.keys 的区别:从“遍历对象属性的坑”说起
前端·javascript
OpenTiny社区20 分钟前
把 SearchBox 塞进项目,搜索转化率怒涨 400%?
前端·vue.js·github
编程猪猪侠1 小时前
Tailwind CSS 自定义工具类与主题配置指南
前端·css
qhd吴飞1 小时前
mybatis 差异更新法
java·前端·mybatis
YGY Webgis糕手之路1 小时前
OpenLayers 快速入门(九)Extent 介绍
前端·经验分享·笔记·vue·web
患得患失9491 小时前
【前端】【vueDevTools】使用 vueDevTools 插件并修改默认打开编辑器
前端·编辑器
ReturnTrue8681 小时前
Vue路由状态持久化方案,优雅实现记住表单历史搜索记录!
前端·vue.js
UncleKyrie1 小时前
一个浏览器插件帮你查看Figma设计稿代码图片和转码
前端
遂心_1 小时前
深入解析前后端分离中的 /api 设计:从路由到代理的完整指南
前端·javascript·api
你听得到112 小时前
Flutter - 手搓一个日历组件,集成单日选择、日期范围选择、国际化、农历和节气显示
前端·flutter·架构