Web/06-JavaScript基础:ES6语法/01-ES6的介绍和环境配置.md
2021-05-24 12:43:12 +08:00

227 lines
6.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 前言
### ECMAScript 简介
ES 的全称是 ECMAScript它是由 ECMA 国际标准化组织 制定的一套**脚本语言的标准化规范**
详细来说ES 是由 ECMA 的第 39 号技术专家委员会Technical Committee 39简称 TC39负责制订 ECMAScript 标准成员包括 MicrosoftMozillaGoogle 等公司
PS简单来说ECMAScript JS 的语言标准当然ECMAScript 还包括其他脚本语言的语言标准
### ECMAScript 版本发布记录
- 1995 ECMAScript 诞生
- 1997 ECMAScript 标准确立ECMA 发布 ECMA-262 标准推出浏览器标准语言 ECMAScript 1.0
- 1999 发布 ES3与此同时IE5 风靡一时
- 2009 发布 ECMAScript 5.0简称 ES5例如 foreachObject.keysObject.create json 标准
- 2011 发布 ECMAScript5.1成为 ISO 国际标准从而推动所有浏览器都支持
- 2015 6 发布 ECMAScript 6简称 ES6 ECMAScript 2015注意**前者是按版本号区分后者是按年份区分**ES 的后续的版本请尽量用**年份**来命名
- 2016 6 发布 ECMAScript 7 ECMAScript 2016
- 2017 6 发布 ECMAScript 8 ECMAScript 2017
- 2018 6 发布 ECMAScript 9 ECMAScript 2018
- 2019 6 发布 ECMAScript 10 ECMAScript 2019
- 2020 6 发布 ECMAScript 11 ECMAScript 2020
- ......
* 此后每年更新一版
### ES6 简介
从上面的 ES 的版本记录可以看出2015 6 ES6 正式发布如果用年份来命名版本号也可以称之为 ES2015
ES6 是新的 JS 语法标准**ES6 实际上是一个泛指泛指 ES 2015 及后续的版本**
很多人在做业务选型的时候会倾向于选 jQuery其实 jQuery 的语法是偏向于 ES3 而现在主流的框架 Vue.js React.js 的默认语法都是用的 ES6
ES6 的改进如下
- ES6 之前的变量提升会导致程序在运行时有一些不可预测性 ES6 中通过 letconst 变量优化了这一点
- ES6 增加了很多功能比如**常量作用域对象代理异步处理继承**这些在 ES5 中想实现比较复杂但是 ES6 对它们进行了封装
- ES6 之前的语法过于松散实现相同的功能不同的人可能会写出不同的代码
ES6 的目标是 JS 语言可以编写复杂的大型应用程序成为企业级开发语言
## ES6 的环境配置为了兼容 ES5
掌握 ES6 之后如果要考虑 ES5 的兼容性可以这样做 ES6 语法的 js 代码然后通过 `Babel` ES6 转换为 ES5
babel 的作用是将 ES6 语法转为 ES5 语法支持低端浏览器
但是在这之前我们需要配置一下相关的环境
### 建立工程目录
1先建立一个空的工程目录 `ES6Demo`并在目录下建立两个文件夹 `src` `dist`
- `src`书写 ES6 代码我们写的 js 程序都放在这里
- `dist`利用 Babel 编译生成的 ES5 代码**我们在 HTML 页面需要引入 dist 里的 js 文件**
2 src 里新建文件 `index.html`
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
<!-- 我们引入 ES5 中的 js 文件,而不是引入 ES6 中的 js 文件。 -->
<script src="./dist/index.js"></script>
</head>
<body></body>
</html>
```
**注意**上方代码中我们引入的是`dist`目录下的 js 文件
然后我们新建文件 `src/index.js`
```javascript
let a = 'smyhvae';
const b = 'qianguyihao';
console.log(a);
console.log(b);
```
这个文件是一个 ES6 语法 js 文件稍后我们尝试把这个 ES6 语法的 js 文件转化为 ES5 js 文件
PS我们在写代码时能用单引号尽量用单引号而不是双引号前者在压缩之后程序执行会更快
### 全局安装 Babel-cli
1初始化项目
在安装 Babel 之前需要先用 npm init 先初始化我们的项目打开终端或者通过 cmd 打开命令行工具进入项目目录输入如下命令
```bash
npm init -y
```
上方代码中`-y` 代表全部默认同意就不用一次次按回车了稍后再根据需要在文件中手动修改命令执行完成后会在项目的根目录下生成 package.json 文件
```json
{
"name": "es6demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "smyhvae",
"license": "ISC"
}
```
PSVS Code 里打开终端的快捷键是`Contol + ~`
2全局安装 Babel-cli
在终端中输入以下命令
```bash
npm install -g babel-cli
```
![](http://img.smyhvae.com/20180304_1305.png)
如果安装比较慢的话Mac 下可以使用`cnpm`进行安装 windows 下可以使用`nrm`切换到 taobao 的镜像
3本地安装 babel-preset-es2015 babel-cli
```bash
npm install --save-dev babel-preset-es2015 babel-cli
```
![](http://img.smyhvae.com/20180304_1307.png)
安装完成后会发现`package.json`文件已经多了 devDependencies 选项
![](http://img.smyhvae.com/20180304_1308.png)
4新建.babelrc
在根目录下新建文件`.babelrc`输入如下内容
```
{
"presets":[
"es2015"
],
"plugins":[]
}
```
5开始转换
现在我们应该可以将 ES6 的文件转化为 ES5 的文件了命令如下此命令略显复杂
```
babel src/index.js -o dist/index.js
```
我们可以将上面这个命令进行简化一下操作如下
在文件 `package.json` 中修改键 `scripts`中的内容
```json
"scripts": {
"build": "babel src/index.js -o dist/index.js"
},
```
修改后的效果如下
![](http://img.smyhvae.com/20180304_1315.png)
目前为止环境配置好了以后我们执行如下命令即可将`src/index.js`这个 ES6 文件转化为 `dist/index.js`这个 ES5 文件
```bash
npm run build
```
我们执行上面的命令之后会发现 dist 目录下会生成 ES5 js 文件
index.js
```javascript
'use strict';
var a = 'smyhvae';
var b = 'qianguyihao';
console.log(a);
console.log(b);
```
当我们打开网页后就可以在浏览器的控制台看到代码的输出结果
本段内容的参考链接<http://jspang.com/2017/06/03/es6/>
## 我的公众号
想学习**更多技能**不妨关注我的微信公众号**千古壹号**
扫一扫你将发现另一个全新的世界而这将是一场美丽的意外
![](http://img.smyhvae.com/20200101.png)