深入理解 ECMAScript 6 核心特性

深入理解 ECMAScript 6 核心特性

jstutorial Javascript tutorial book jstutorial 项目地址: https://gitcode.com/gh_mirrors/js/jstutorial

ECMAScript 6(简称ES6)是JavaScript语言的重大更新,为开发者提供了更强大、更现代的编程能力。本文将深入解析ES6的核心特性,帮助开发者全面掌握这些新语法和功能。

变量声明新方式

let 命令

let是ES6新增的变量声明方式,与var相比有以下显著特点:

  1. 块级作用域:let声明的变量只在当前代码块内有效
  2. 不存在变量提升:必须先声明后使用
  3. 不允许重复声明:同一作用域内不能重复声明同一变量
{
  let a = 10;
  var b = 1;
}
a // ReferenceError
b // 1

let特别适合用于循环计数器,解决了var在循环中变量共享的问题:

for (let i = 0; i < 10; i++) {
  // 每次循环i都是独立的
}

const 命令

const用于声明常量,具有以下特性:

  1. 声明后值不能改变
  2. 必须立即初始化
  3. 作用域与let相同(块级作用域)
  4. 对于复合类型变量,变量名不指向数据,而是指向数据所在的地址
const PI = 3.1415;
PI = 3; // 报错

const obj = {};
obj.prop = 123; // 可以修改属性
obj = {}; // 报错

新的数据结构

Set 集合

Set是一种不包含重复值的集合:

const s = new Set();
[2,3,5,4,5,2,2].forEach(x => s.add(x));
for (let i of s) {
  console.log(i); // 2, 3, 5, 4
}

Set常用方法:

  • add(value):添加值
  • delete(value):删除值
  • has(value):检查是否存在
  • clear():清空集合
  • size:获取元素数量

Map 映射

Map是键值对的集合,与Object的主要区别是:

  1. 键可以是任意类型(Object只能是字符串或Symbol)
  2. 有size属性
  3. 可以直接遍历
const m = new Map();
const o = {p: 'Hello'};

m.set(o, 'content');
m.get(o); // "content"

Map常用方法:

  • set(key, value)
  • get(key)
  • has(key)
  • delete(key)
  • clear()

函数增强特性

箭头函数

箭头函数提供更简洁的函数写法:

// 传统函数
var sum = function(a, b) {
  return a + b;
};

// 箭头函数
const sum = (a, b) => a + b;

箭头函数特点:

  1. 没有自己的this,继承外层this
  2. 不能用作构造函数
  3. 没有arguments对象
  4. 不能用作generator函数

函数参数默认值

ES6允许为参数设置默认值:

function log(x, y = 'World') {
  console.log(x, y);
}

log('Hello'); // Hello World
log('Hello', 'China'); // Hello China

rest参数

rest参数(形式为...变量名)用于获取函数的多余参数:

function add(...values) {
  let sum = 0;
  for (var val of values) {
    sum += val;
  }
  return sum;
}

add(2, 5, 3); // 10

迭代器和生成器

迭代器(Iterator)

迭代器是一种接口,为不同的数据结构提供统一的访问机制:

function makeIterator(array) {
  let nextIndex = 0;
  return {
    next: function() {
      return nextIndex < array.length ?
        {value: array[nextIndex++], done: false} :
        {done: true};
    }
  };
}

const it = makeIterator(['a', 'b']);
it.next(); // {value: 'a', done: false}
it.next(); // {value: 'b', done: false}
it.next(); // {done: true}

生成器(Generator)

生成器是返回迭代器的函数,使用function*语法:

function* idMaker() {
  let index = 0;
  while(true)
    yield index++;
}

const gen = idMaker();
gen.next().value; // 0
gen.next().value; // 1
gen.next().value; // 2

生成器特点:

  1. function*声明
  2. 函数内部使用yield表达式
  3. 可以暂停执行和恢复执行
  4. 是异步编程的重要解决方案

解构赋值

ES6允许按照一定模式从数组和对象中提取值:

数组解构

let [a, b, c] = [1, 2, 3];
a // 1
b // 2
c // 3

let [x, y = 'b'] = ['a']; // x='a', y='b'

对象解构

let { foo, bar } = { foo: "aaa", bar: "bbb" };
foo // "aaa"
bar // "bbb"

let { sin, cos } = Math;

解构赋值的用途:

  1. 交换变量值 [x, y] = [y, x]
  2. 函数返回多个值
  3. 函数参数定义
  4. 提取JSON数据
  5. 函数参数默认值

字符串扩展

模板字符串

使用反引号(`)标识,可以嵌入变量和多行文本:

const name = 'Bob';
const time = 'today';
const str = `Hello ${name}, 
how are you ${time}?`;

新增方法

  • includes():是否包含子串
  • startsWith():是否以某子串开头
  • endsWith():是否以某子串结尾
  • repeat():重复字符串
  • padStart()/padEnd():补全长度

面向对象增强

Class语法

ES6引入了class关键字:

class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }
  
  toString() {
    return `(${this.x}, ${this.y})`;
  }
}

const p = new Point(1, 2);

继承

使用extends实现继承:

class ColorPoint extends Point {
  constructor(x, y, color) {
    super(x, y);
    this.color = color;
  }
  
  toString() {
    return super.toString() + ' in ' + this.color;
  }
}

模块系统

ES6引入了模块化概念:

导出

// profile.js
export var firstName = 'Michael';
export function multiply(x, y) {
  return x * y;
}

导入

import { firstName, multiply } from './profile';

默认导出

// export-default.js
export default function() {
  console.log('foo');
}

// import-default.js
import customName from './export-default';

Promise对象

Promise是异步编程的解决方案:

const promise = new Promise(function(resolve, reject) {
  // ... some code
  
  if (/* 异步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});

promise.then(function(value) {
  // success
}, function(error) {
  // failure
});

总结

ES6为JavaScript带来了革命性的变化,使这门语言更加现代化和强大。掌握这些新特性不仅能提高开发效率,还能写出更简洁、更易维护的代码。建议开发者逐步将这些特性应用到实际项目中,充分发挥ES6的优势。

jstutorial Javascript tutorial book jstutorial 项目地址: https://gitcode.com/gh_mirrors/js/jstutorial

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

齐飞锴Timothea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值