ES5和ES6的区别

ES5和ES6d的区别

1. 语法和变量声明

ES5: 只有 var 一种变量声明方式,存在变量提升(hoisting)和作用域不清晰的问题(全局作用域或函数作用域)。

var x = 10;
if (true) {
  var x = 20; // 覆盖外层的 x
}
console.log(x); // 输出 20

ES6 新增: 引入 let 和 const,支持块级作用域,避免变量提升问题。

let x = 10;
if (true) {
  let x = 20; // 块内 x,不会影响外层
}
console.log(x); // 输出 10
const y = 30; // 常量,不可重新赋值
  1. 箭头函数 (Arrow Functions) ES5: 使用传统函数表达式。

var add = function(a, b) {
  return a + b;
};

ES6 新增: 箭头函数,语法更简洁,且 this 绑定到父作用域(词法作用域),不动态绑定。

  1. 模板字符串 (Template Literals) ES5: 字符串拼接使用 +。

ES6 新增: 模板字符串使用反引号(`),支持多行和表达式嵌入。

  1. 解构赋值 (Destructuring Assignment) ES5: 手动从对象或数组中提取值。

ES6 新增: 支持对象和数组的解构赋值。

  1. 默认参数 (Default Parameters) ES5: 需要在函数体内手动设置默认值。

ES6 新增: 函数参数可以直接设置默认值。

  1. 扩展运算符 (Spread/Rest Operator) ES5: 操作数组或合并需要用 apply 或循环。

ES6 新增: 使用 ... 扩展运算符,简洁合并数组或对象,也可以用作剩余参数。

  1. 类 (Classes) ES5: 使用构造函数和原型链实现“类”。

ES6 新增: 引入 class 语法,更直观地支持面向对象编程。

  1. 模块 (Modules) ES5: 没有原生模块系统,依赖 CommonJS 或 AMD。

ES6 新增: 原生支持 import 和 export。

  1. Promise ES5: 异步操作依赖回调函数,容易导致“回调地狱”。

ES6 新增: 引入 Promise,优雅处理异步。

  1. 其他重要新增特性

Symbol: ES6 引入的新基本数据类型,用于创建唯一标识符。

迭代器和生成器 (Iterators & Generators): 增强循环和异步控制。

Map 和 Set: 新增数据结构,支持键值对和唯一值集合。

async/await: ES6 之后的扩展(ES2017),基于 Promise 进一步简化异步代码。

总结

ES6 相比 ES5 的主要新增点包括:块级作用域(let/const)、箭头函数、模板字符串、解构赋值、默认参数、扩展运算符、类、模块、Promise 以及更多数据结构和工具。这些特性让 JavaScript 更现代化、更易用,特别适合复杂应用的开发。 如果你需要更深入某个特性或代码示例,可以告诉我哦!

最后更新于

这有帮助吗?