1. ES6怎么来的
ECMAScript 和 JavaScript
- ECMA 是标准,JS 是实现
- ECMAScript 简称 ECMA 或 ES
历史版本
2. ES6兼容性
ES6(ES2015) 支持的环境 IE10+, Chrome, FireFox, 移动端, NodeJS
解决不兼容办法,编译、转换
- 在线转换
- 或者提前编译
-
- Babel 入门教程 阮一峰
- Babel 是一个 JavaScript 编译器
- 一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行
- 现在就用 ES6 编写程序,而不用担心现有环境是否支持
3. ES6精髓
- 变量
- 函数
- 数组
- 字符串
- 面向对象
- Promise
- generator
- 模块化
4. 变量
var 的问题
- 可以重复声明,没有报错和警告
- 无法限制修改
- 没有块级作用域,
{ }
let 和 const
- 不能重复声明
- 都是块级作用域,
{ }块内声明的,块外无效 - let 是变量,可以修改
- const 是常量,不能修改
块级作用域举例
- 原来用 var 的方式,结果弹出的都是 3
- 或者将变量 封装到函数里,限制作用域,但比较麻烦
- 用 let 最简单,直接 var 改 let,解决作用域问题
1 |
|
4.函数-箭头函数
- 箭头函数,就是函数的简写
- 如果只有一个参数,
()可以省 - 如果只有一个
return,{}可以省
- 如果只有一个参数,
1 | // 普通函数 |
1 | let show1 = function () { |
5.函数-参数
- 参数扩展/展开
...args- 收集剩余的参数,必须当到最后一个参数位置
- 展开数组,简写,效果和直接把数组的内容写在这儿一样
- 默认参数
1 | function show(a, b, ...args) { |
6.解构赋值
1 | let [a, b, c] = [1, 2, 3] |
- 解构赋值
- 左右两个边结构必须一样
- 右边必须是个东西
- 声明和赋值赋值不能分开,必须在一句话里
1
2
3
4
5
6
7声明和赋值不能分开的意思:
这样写,会报错:
let [a, b];
[a, b] = [12, 5];
要写在一起:
let [a, b] = [12, 5];
7.数组
- 新增4个方法(map, reduce, filter, forEach)
- map 映射 一个对一个
1 | let arr = [12, 5, 8] |
- reduce 汇总 一堆出来一个
- 用于比如,算个总数,算个平均
1 | var arr = [1, 3, 5, 7] |
- filter 过滤器 保留为true的
1 | var arr = [12, 4, 8, 9] |
- forEach 循环迭代
1 | var arr = [12, 4, 8, 9] |
8.字符串
- 多了两个新方法
startsWithendsWith
1 | var url = 'http://qq.com' |
- 字符串模版
- 使用反单引号,
${变量} - 可以折行
- 使用反单引号,
1 | let a = 12 |
9.面向对象-基础
- 原来写法
- 类和构造函数一样
- 属性和方法分开写的
1 | // 老版本 |
- 新版面向对象
- 有了 class 关键字、构造器和类分开了
- class 里面直接加方法
- 重点是继承,super 超类==父类
1 | class User { |
10.面向对象应用
- React
- 用于构建用户界面的 JavaScript 库
- 组件化,一个组件就是一个 class
- JSX == babel == browser.js
- JSX (js扩展版)
使用的时候,引入react.js,react-dom.js,browser.js。
1 | 注意type写babel |
11.json
- JSON 格式
- JavaScript Object Notation 的缩写,是一种用于数据交换的文本格式
- JSON 是 JS对象 的严格子集
- JSON 的标准写法
- 只能用双引号
- 所有的key都必须用双引号包起来
- JSON 对象
- JSON 对象是 JavaScript 的原生对象,用来处理 JSON 格式数据,有两个静态方法
- JSON.parse(string) :接受一个 JSON 字符串并将其转换成一个 JavaScript对象。
- JSON.stringify(obj) :接受一个 JavaScript对象 并将其转换为一个 JSON 字符串。
1 | var json = {a: 12, b: 5} |
- 对象(object)
- 是 JavaScript 语言的核心概念,也是最重要的数据类型
- 对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合
- 对象的所有键名都是字符串, 所以加不加引号都可以
- 如果键名是数值,会被自动转为字符串
- 对象的每一个键名又称为“属性”(property),它的“键值”可以是任何数据类型
- 如果一个属性的值为函数,通常把这个属性称为“方法”,它可以像函数那样调用
- in 运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值
- for…in循环用来遍历一个对象的全部属性
- 对象 简写
- key-value 一样时可以简写
- 里面函数可以简写, 去掉
1 | var a = 12, b = 5 |
12.Promise
(消除异步操作)
- 异步和同步
- 异步,操作之间没有关系,同时执行多个操作, 代码复杂
- 同步,同时只能做一件事,代码简单
- Promise 对象
- 用同步的方式来书写异步代码
- Promise 让异步操作写起来,像在写同步操作的流程,不必一层层地嵌套回调函数
- 改善了可读性,对于多层嵌套的回调函数很方便
- 充当异步操作与回调函数之间的中介,使得异步操作具备同步操作的接口
- Promise 也是一个构造函数
- 接受一个回调函数f1作为参数,f1里面是异步操作的代码
- 返回的p1就是一个 Promise 实例
- 所有异步任务都返回一个 Promise 实例
- Promise 实例有一个then方法,用来指定下一步的回调函数
1 | let p = new Promise(function (resolve, reject)) { |
- Promise 使得异步流程可以写成同步流程
1 | // 传统写法 |
- Promise.all(promiseArray)方法
- 将多个Promise对象实例包装,生成并返回一个新的Promise实例
- promise数组中所有的promise实例都变为resolve的时候,该方法才会返回
- 并将所有结果传递results数组中
- promise数组中任何一个promise为reject的话,则整个Promise.all调用会立即终止,并返回一个reject的新的promise对象
1 | var p1 = Promise.resolve(1), |
- Promise.race([p1, p2, p3])
- Promse.race就是赛跑的意思
- 哪个结果获得的快,就返回那个结果
- 不管结果本身是成功状态还是失败状态
- 本文作者: LQbank
- 本文链接: http://example.com/2021/01/13/深入解读ES6系列-全18讲/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!