JavaScript 是一门动态语言,它的发展速度非常快,每年都会推出新的版本。ES6、ES7、ES8、ES9、ES10 和 ES11 是 JavaScript 的几个版本,每个版本都带来了新的特性和功能,让开发人员更加便捷地编写代码。本文将介绍 ES6、ES7、ES8、ES9、ES10 和 ES11 的常用的新增和升级功能,并包含示例代码。
ES6
ES6 是 JavaScript 的第六个版本,也是目前最广泛使用的版本。ES6 引入了许多新的特性和语法,包括箭头函数、模板字符串、解构赋值、let 和 const 关键字等。
箭头函数
箭头函数是 ES6 中最常用的特性之一,它可以简化函数的定义和调用,同时还可以解决 this 指向的问题。
// 传统函数 function add(a, b) { return a + b; } // 箭头函数 const add = (a, b) => a + b;
模板字符串
模板字符串是一种新的字符串表示方法,可以在字符串中插入变量或表达式,使代码更加简洁易读。
const name = 'Tom'; const age = 18; const message = `My name is ${name}, and I am ${age} years old.`; console.log(message); // 输出:My name is Tom, and I am 18 years old.
解构赋值
解构赋值是一种快速获取数组或对象中的值的方式,它可以让代码更加简洁易读。
// 数组解构赋值 const [a, b, c] = [1, 2, 3]; console.log(a, b, c); // 输出:1 2 3 // 对象解构赋值 const { name, age } = { name: 'Tom', age: 18 }; console.log(name, age); // 输出:Tom 18
let 和 const 关键字
let 和 const 是 ES6 中新增的关键字,它们可以用来声明变量和常量,let 声明的变量可以重新赋值,而 const 声明的常量不可重新赋值。
let count = 1; count = 2; // 可以重新赋值 const PI = 3.14; PI = 3.1415; // 不能重新赋值,会报错
ES7
ES7 是 JavaScript 的第七个版本,它引入了一些新的特性和语法,其中最常用的是数组 includes 方法和指数运算符。
数组 includes 方法
数组 includes 方法可以用来判断一个数组是否包含某个元素,它返回一个布尔值。
const arr = [1, 2, 3]; console.log(arr.includes(2)); // 输出:true console.log(arr.includes(4)); // 输出:false
指数运算符
指数运算符可以用来计算一个数的 n 次方。
console.log(2 ** 3); // 输出:8 console.log(10 ** -2); // 输出:0.01
ES8
ES8 是 JavaScript 的第八个版本,它引入了一些新的特性和语法,其中最常用的是 async/await 和 Object.values/Object.entries 方法。
async/await
async/await 是 ES8 中最常用的特性之一,它可以让异步编程更加简单易读。
async function getData() { const response = await fetch('https://api.github.com/users'); const data = await response.json(); return data; }
Object.values/Object.entries 方法
Object.values/Object.entries 方法可以用来获取对象的值或键值对数组。
const obj = { name: 'Tom', age: 18 }; console.log(Object.values(obj)); // 输出:['Tom', 18] console.log(Object.entries(obj)); // 输出:[['name', 'Tom'], ['age', 18]]
ES9
ES9 是 JavaScript 的第九个版本,它引入了一些新的特性和语法,其中最常用的是异步迭代器和正则表达式命名捕获组。
异步迭代器
异步迭代器可以用来处理异步数据流,它可以让异步编程更加简单易读。
async function getData() { const response = await fetch('https://api.github.com/users'); const data = await response.json(); for await (const user of data) { console.log(user.login); } }
正则表达式命名捕获组
正则表达式命名捕获组可以用来给正则表达式的匹配结果命名。
const str = '2021-01-01'; const reg = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; const match = str.match(reg); console.log(match.groups.year); // 输出:2021 console.log(match.groups.month); // 输出:01 console.log(match.groups.day); // 输出:01
ES10
ES10 是 JavaScript 的第十个版本,它引入了一些新的特性和语法,其中最常用的是数组 flat 方法和对象扩展语法。
数组 flat 方法
数组 flat 方法可以用来将多维数组转换为一维数组。
const arr = [1, [2, 3], [4, [5, 6]]]; console.log(arr.flat()); // 输出:[1, 2, 3, 4, [5, 6]] console.log(arr.flat(2)); // 输出:[1, 2, 3, 4, 5, 6]
对象扩展语法
对象扩展语法可以用来快速创建新的对象。
const obj1 = { name: 'Tom', age: 18 }; const obj2 = { ...obj1, gender: 'male' }; console.log(obj2); // 输出:{ name: 'Tom', age: 18, gender: 'male' }
ES11
ES11 是 JavaScript 的第十一个版本,它引入了一些新的特性和语法,其中最常用的是可选链操作符和 Promise.allSettled 方法。
可选链操作符
可选链操作符可以用来处理对象中的空值或 undefined 值。
const obj = { name: 'Tom', age: 18, address: { city: 'Shanghai' } }; console.log(obj.address?.city); // 输出:Shanghai console.log(obj.address?.country); // 输出:undefined
Promise.allSettled 方法
Promise.allSettled 方法可以用来获取多个 Promise 的执行结果,不论成功还是失败。
const promise1 = Promise.resolve('success'); const promise2 = Promise.reject('error'); Promise.allSettled([promise1, promise2]).then((results) => { console.log(results); }); // 输出:[{ status: 'fulfilled', value: 'success' }, { status: 'rejected', reason: 'error' }]
总结
ES6、ES7、ES8、ES9、ES10 和 ES11 是 JavaScript 的几个版本,每个版本都带来了新的特性和功能,让开发人员更加便捷地编写代码。本文介绍了 ES6、ES7、ES8、ES9、ES10 和 ES11 的常用的新增和升级功能,并包含示例代码,希望对大家学习和使用 JavaScript 有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650f8f4595b1f8cacd844844