ES6 核心新特性详解:let/const、模板字符串、Set/Map 与函数参数优化

清欢
清欢
发布时间:2026-10-14 | 5人浏览过
原创

JavaScript 的 ES6 版本已被各大浏览器广泛支持,成为现代前端开发的基石。对于尚不熟悉 ES6 的开发者,掌握其核心语法能显著提升代码质量。本文将重点解析四个关键新特性:引入块级作用域的变量声明、简洁的模板字符串、更强大的数据结构 Set 与 Map,以及优化的函数参数处理,并附带具体操作示例。

结果与目标

理解并应用 ES6 的新语法,以解决传统 ES5 在变量作用域管理、字符串拼接便利性、集合数据处理及函数参数健壮性方面的痛点,实现更规范、高效的代码编写。

准备条件

  • 开发环境:支持 ES6 的浏览器(如 Chrome、Firefox 最新版的)或 Node.js 环境。
  • 工具辅助:虽然现代环境已原生支持,但在需要兼容老旧浏览器的场景中,配置 Babel 进行编译转换是必要的准备工作。

真实操作顺序

第 1 步:使用 let 和 const 声明变量

目的:解决 ES5 中 var 缺乏块级作用域限制以及无法真正定义常量的缺陷。

动作:将原有的 var 替换为 let 用于块级变量声明,使用 const 用于不可变常量引用。

重要参数:let 限作用于当前代码块({}),const 赋值后不可重新指向其他内存地址。

操作演示:

在 ES5 中,if 块内声明的 var 变量会泄漏到外部:

var a = 1;
if (true) {
  var b = 2;
}
console.log(a); // 1
console.log(b); // 2 (变量泄漏)

在 ES6 中使用 let 限定作用域:

let a = 1;
if (true) {
  let b = 2;
}
console.log(a); // 1
console.log(b); // ReferenceError: b is not defined (正确报错)

循环中的闭包陷阱修正:

使用 var 声明循环变量时,由于共享同一个引用,常见代码如下:

var a = [];
for (var i=0; i < 5; i++) {
  a.push(function() {
    console.log(i);
  });
}
a.forEach(function(value) { value(); }); // 输出: 5, 5, 5, 5, 5

改用 let 声明循环变量,每次迭代创建新的绑定:

var b = [];
for (let i=0; i < 5; i++) {
  b.push(function() {
    console.log(i);
  });
}
b.forEach(function(value) { value(); }); // 输出: 0, 1, 2, 3, 4

常量定义:

ES5 只能靠约定大写命名来模拟常量,而 ES6 的 const 会强制拦截赋值行为:

const MY_CONSTANT = true;
MY_CONSTANT = false; // Uncaught TypeError: Assignment to constant variable

第 2 步:使用模板字符串

目的:简化多行文本插入和变量拼接,提高可读性。

动作:使用反引号 (`) 包裹字符串,并在内部使用 ${expression} 插入变量。

完成状态:无需使用加号 (+) 连接字符串和变量,结构清晰。

操作对比:

ES5 拼接方式:

var url = 'http://www.' + domain + '.com/' + path + '?' + queryParams;

ES6 模板字符串方式:

let url = `http://www.${domain}.com/${path}?${queryParams}`;

第 3 步:使用新的 Set 和 Map 对象

目的:获得内置的去重集合支持和更健壮的键值对数据结构。

入口:通过 new Set() 和 new Map() 构造函数实例化。

3.1 Set 处理重复数据

ES5 中需手动判断去重,逻辑繁琐:

var collection = [];
collection.push(1, 2, 1);
// 需额外逻辑去除重复的 1

ES6 Set 自动去重:

let collection = new Set();
collection.add(1);
collection.add(2);
collection.add(1);
console.log(collection); // Set { 1, 2 }

3.2 Map 存储键值对

ES5 使用 Object 存储键值对存在原型污染或非字符串 key 转换问题:

var collection = {};
collection.a = 'abc';
collection.b = 'xyz';

ES6 Map 提供更原生的体验:

let collection = new Map();
collection.set('a', 'abc');
collection.set('b', 'xyz');

遍历 Map:

collection.forEach(function(value, key) {
  console.log(key + ":" + value);
});
console.log(collection.size); // 获取元素数量

第 4 步:优化函数参数

目的:减少防御性编程代码量,使函数签名更直观。

动作 1:参数默认值

替代传统的 undefined 检查:

// ES5 写法
function doSomething(someObject) {
  if (someObject === undefined) {
    someObject = {};
  }
  console.log(someObject);
}

ES6 简写:

function doSomething(someObject = {}) {
  console.log(someObject);
}

动作 2:对象解构

直接从传入的对象参数中提取属性,避免重复调用 somenObject.propName:

// ES5 写法
function doSomething(someObject) {
  var one = someObject.propOne;
  var two = someObject.propTwo;
  console.log(one, two);
}

ES6 解构写法:

function doSomething({ propOne, propTwo }) {
  console.log(propOne); // 直接可用
  console.log(propTwo);
}

完成判断

当代码能够正确使用块级作用域变量而不发生泄漏,字符串拼接不再依赖复杂的加号连接,容器类数据使用 Set/Map 获得天然特性,且函数签名简洁无多余校验代码时,即表示已成功应用这些 ES6 核心语法。

简要总结

以上就是 ES6 核心新特性的详细内容,更多关于 JavaScript 进阶学习的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表