1.变量声明Let
let a;
let b,c,d;
let e = 100,g = [];
1.变量不能重复声明(var可以)
2.块儿级作用域,指变量只在代码块里面{},if,else,for,while有效,其他位置失效
3.不存在变量提升(先声明在使用)
错的
4.不影响作用域链(指在代码块内在声明代码块,可以使用变量)
是可以的
2.常量声明const
值不能修改的量称为常量
const QWE = 'qwe';
-
一定要赋初始值
-
(潜规则)一般声明常量使用大写
-
常量值不可修改
-
也是块级作用域(详见let部分)
-
对于数组和对象的元素修改不算做对常量的修改,不会报错!(因为常量地址没有改变)
没问题
3.扩展运算符介绍 ...
是可以将数组转化为逗号分割的参数序列
const boys = ['a','b','c'];
function aaa(){
console.log(arguments);
}
aaa(boys);
aaa(...boys);
第一种会装进一个数组 第二种会变成三个实参,变成了参数序列(把数组打散)
扩展运算符应用
1.数组合并
2.数组克隆
3.将伪数组转为真数组
把div对象转为数组
4. 迭代器
是一种接口,为各种不同的数据结构提供统一的访问机制,任何数据结构只要部署Iterator,就可以完成遍历操作
Es6创建了新的遍历命令 for...of循环
for in 循环的是键名(0123)
for of 循环的是键值
工作原理
5. Promise
是一个构造函数,用来封装异步操作并获取其成功或失败的结果
-
首先实例化Promise,参数是一个函数,函数里有两个参数一个成功,一个失败。在参数函数内写一个异步任务,最后把数据放在resolve或reject里(成功或失败),从而改变p的状态。
-
p调用then方法,方法参数是两个函数,分别代表成功或失败,成功调第一个,失败调第二个。
Promise读取文件
- 不使用promise读取(fs输入node里的核心模块):
- 使用promise读取
- 总的来说就是把上面的方法封装在promise里面,可读性高。
附回调地狱
Promise封装Ajax请求
- 原生Ajax发送请求
- xhr首先实例化
- 然后调用
open设定请求 - 调用
send发送请求 - 调用
onreadystatechange处理响应结果 - 如果
readystate=4(代表相应内用解析完成,可以在客户端用了) - 在判断响应码
status,在200-299内为成功,否则失败(可能会输出404或者500)。
- Promise封装Ajax请求
-
用Promise示例p包裹以上方法
-
把控制台输出改为装进resove\reject里,改变p状态
- 调用then方法输出结果
catch方法
可见catch只指定一个回调函数就可以