文章目录
✨文章有误请指正,如果觉得对你有用,请点赞收藏关注一波,谢谢支持😘
前言
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相关介绍
- 什么是 ECMA
ECMA(European Computer Manufacturers Association)中文名称为欧洲计算机制造商协会,这个组织的目标是评估、开发和认可电信和计算机标准。1994 年后该组织改名为Ecma 国际。 - 什么是ECMAScript
ECMAScript 是由 Ecma 国际通过ECMA-262 标准化的脚本程序设计语言。 - 什么是 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。
- 谁在维护 ECMA-262
TC39(Technical Committee 39)是推进ECMAScript 发展的委员会。其会员都是公司(其中主要是浏览器厂商,有苹果、谷歌、微软、因特尔等)。TC39 定期召开会议,会议由会员公司的代表与特邀专家出席。 - 为什么要学习 ES6
ES6 的版本变动内容最多,具有里程碑意义
ES6 加入许多新的语法特性,编程实现更简单、高效
ES6 是前端发展趋势,就业必备技能 - ES6 兼容性
地址:http://kangax.github.io/compat-table/es6/
第2章、ECMASript 6 新特性
1. let 关键字
- let 关键字用来声明变量,let 声明和var声名变量对比:
- 不允许重复声明同名的变量
- 有块级作用域
- 不存在变量提升
- 不影响作用域链
- 应用
- 解决 作用域点击 but[i]\this.的问题
如👇
2. const 关键字
- const 关键字用来声明变量,const 声明和var声名变量对比:
- 声明必须赋初始值
- 标识符一般为大写(潜规则)
- 值不允许修改
- E不允许重复声明
- 块级作用域
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;
- 特点
- 全局作用域下,this始终指向window对象
- 不能使用call,apply改变this的指向
- 没有arguments
- 不能用构造函数去实例对象
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 参数的逆运算,将一个数组转为用逗号分隔的参数序列,对数组进行解包。可用在调用函数时,传递的实参,将一个数组转换为参数序列。