Bootstrap

ES6-ES11新特性(这一篇就够了)

✨文章有误请指正,如果觉得对你有用,请点赞收藏关注一波,谢谢支持😘


前言

ECMAScript 是一种由 Ecma 国际(前身为欧洲计算机制造商协会)在标准 ECMA-262 中定义的脚本语言规范。这种语言在万维网上应用广泛,它往往被称为 JavaScript 或 JScript,但实际上后两者是 ECMA-262 标准的实现和扩展


历史

ECMAScript 是由网景的布兰登·艾克开发的一种脚本语言的标准化规范;最初命名为Mocha,后来改名为 LiveScript,最后重命名为 JavaScript。1995年12月,升阳与网景联合发表了JavaScript。1996年11月,网景公司将 JavaScript 提交给欧洲计算机制造商协会进行标准化。ECMA-262 的第一个版本于 1997 年 6 月被 Ecma 组织采纳。ECMAScript 是由ECMA-262 标准化的脚本语言的名称。


版本

版本 发表日期 与前版本的差异
ES.8 1997年6月 首版
ES.9 1998年6月 格式修正,以使得其形式与ISO/IEC16262国际标准一致
ES.10 1999年12月 强大的正则表达式,更好的词法作用域链处理,新的控制指令,异常处理,错误定义更加明确,数据输出的格式化及其它改变
ES.无 放弃 由于关于语言的复杂性出现分歧,第4版本被放弃,其中的部分成为了第5版本及Harmony的基础;由ActionScript实现
ES.100 2009年12月 新增“严格模式(strict mode)”,一个子集用作提供更彻底的错误检查,以避免结构出错。澄清了许多第3版本的模糊规范,并适应了与规范不一致的真实世界实现的行为。增加了部分新功能,如getters及setters,支持JSON以及在对象属性上更完整的反射
ES.1.2 2011年6月 ECMAScript标5.1版形式上完全一致于国际标准ISO/IEC 16262:2011。
ES6 2015年6月 ECMAScript 2015(ES2015),第 6 版,最早被称作是 ECMAScript 6(ES6),添加了类和模块的语法,其他特性包括迭代器,Python风格的生成器和生成器表达式,箭头函数,二进制数据,静态类型数组,集合(maps,sets 和 weak maps),promise,reflection 和 proxies。作为最早的 ECMAScript Harmony 版本,也被叫做ES6 Harmony。
ES7 2016年6月 ECMAScript 2016(ES2016),第 7 版,多个新的概念和语言特性
ES8 2017年6月 ECMAScript 2017(ES2017),第 8 版,多个新的概念和语言特性
ES9 2018年6月 ECMAScript 2018 (ES2018),第 9 版,包含了异步循环,生成器,新的正则表达式特性和 rest/spread 语法。
ES10 2019年6月 ECMAScript 2019 (ES2019),第 10 版
ES11 2020年6月 ECMAScript 2020 (ES2020),第 11 版

ECMAScript6~ECMAScript11

第1章、ECMAScript相关介绍

在这里插入图片描述

  1. 什么是 ECMA
    ECMA(European Computer Manufacturers Association)中文名称为欧洲计算机制造商协会,这个组织的目标是评估、开发和认可电信和计算机标准。1994 年后该组织改名为Ecma 国际。
  2. 什么是ECMAScript
    ECMAScript 是由 Ecma 国际通过ECMA-262 标准化的脚本程序设计语言。
  3. 什么是 ECMA-262
    Ecma 国际制定了许多标准,而ECMA-262 只是其中的一个,所有标准列表查看:http://www.ecma-international.org/publications/standards/Standard.htm
    ECMA-262 历史版本查看网址:
    http://www.ecma-international.org/publications/standards/Standard.htm
    http://www.ecma-international.org/publications/standards/Ecma-262-arch.htm
  • ES5 是 ECMAScript 第5版,2009年发布。
  • ES6 是 ECMAScript 第6版,2015年发布,也叫 ES2015。
  • 从 ES6 开始,每年发布一个版本,版本号比年份最后一位大 1。
  1. 谁在维护 ECMA-262
    TC39(Technical Committee 39)是推进ECMAScript 发展的委员会。其会员都是公司(其中主要是浏览器厂商,有苹果、谷歌、微软、因特尔等)。TC39 定期召开会议,会议由会员公司的代表与特邀专家出席。
  2. 为什么要学习 ES6
    ES6 的版本变动内容最多,具有里程碑意义
    ES6 加入许多新的语法特性,编程实现更简单、高效
    ES6 是前端发展趋势,就业必备技能
  3. ES6 兼容性
    地址:http://kangax.github.io/compat-table/es6/

第2章、ECMASript 6 新特性

1. let 关键字

  • let 关键字用来声明变量,let 声明和var声名变量对比:
    1. 不允许重复声明同名的变量
    2. 有块级作用域
    3. 不存在变量提升
    4. 不影响作用域链
  • 应用
    1. 解决 作用域点击 but[i]\this.的问题

如👇
在这里插入图片描述

2. const 关键字

  • const 关键字用来声明变量,const 声明和var声名变量对比:
    1. 声明必须赋初始值
    2. 标识符一般为大写(潜规则)
    3. 值不允许修改
    4. E不允许重复声明
    5. 块级作用域

3. 变量的解构赋值

  • ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为 解构赋值
  • 数组的解构赋值:
    const arr = [‘red’, ‘green’, ‘blue’];
    let [r, g, b] = arr;
  • 对象的解构赋值 如↓
let obj = {
   
name: 'xiansheng',
age: 23,
obj1: function () {
   
console.log('hello');
},
}
let {
   name, age, obj1} = obj;
console.log(name,age,obj1())

在这里插入图片描述
应用场景:频繁使用对象方法、数组元素,就可以使用解构赋值形式。

4. 模板字符串

  • 模板字符串(template string)是增强版的字符串,${``}:
  • 用法:
let name = 'jack';
console.log(`我的名字叫${
     name}`);
```应用场景:当遇到字符串与变量拼接的情况使用模板字符串。```

5. 简化对象写法

  • ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。
let name= 'xiansheng';
let age = 35;
let obj1= function () {
   
 console.log('obj1');
}
//简写
const obj = {
   
 name,
 age,
obj1
}

应用场景:对象简写形式简化了代码,所以以后用简写就对了。

6. 箭头函数

  • 简写一:
fun(a,b){
   console.log(a+b)}  =》  (a,b)=>{
   console.log(a,b)} 
  • 简写二:
fun(a){
   return a}  =》  当只有一个参数且只有一个返回值的时候可以这样; a=>a;
  • 特点
    1. 全局作用域下,this始终指向window对象
    2. 不能使用call,apply改变this的指向
    3. 没有arguments
    4. 不能用构造函数去实例对象

7. 函数参数默认值设定

  • ES6 允许给函数参数设置默认值,当调用函数时不给实参,则使用参数默认值。
  • 具有默认值的形参,一般要靠后。
(x, y, z=3) =>{
   console.log(x + y + z) };
console.log(add(1, 2)); // 6
* 可与解构赋值结合:
```javascript
function connect({
    host = '127.0.0.1', uesername, password, port }) {
   
 console.log(host); // 127.0.0.1
 console.log(uesername); //root
 console.log(password); //root
 console.log(port); //3306
}
connect({
   
 // host: 'docs.mphy.top',
 uesername: 'root',
 password: 'root',
 port: 3306
})

8. rest 参数

  • ES9引入 rest 参数,用于获取函数的实参,用来代替 arguments,作用与 arguments 类似。将接收的参数序列转换为一个数组对象。
  • 用在函数形参中,语法格式:Fun(a, b, …args),写在参数列表最后面。
let Fun= (a, b, ...arr) => {
   
 console.log(a);//1
 console.log(b);//2
 console.log(arr);//[3,4,5]
};
Fun(1,2,3,4,5);
* 案例
```javascript
let add = (...arr) => {
   
 let sum = arr.reduce((pre, cur) => {
   
     return pre + cur
 });
 return sum;
}
console.log(add(1, 2, 3, 4, 5)); // 15

应用场景:rest 参数非常适合不定个数参数函数的场景

9. spread 扩展运算符

  • ES9引入 扩展运算符(spread)也是三个点(…)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列,对数组进行解包。可用在调用函数时,传递的实参,将一个数组转换为参数序列。
;