let关键字
- 不能重复声明(防止变量被污染)
- 块级作用域
- 不会变量提升
- 不影响作用域链
const关键字
- 必须赋初值
- 一般常量大写
- 常量值不可修改
- 块级作用域
- const定义数组或对象时,内部属性可修改
解构赋值
模板字符串(反引号)
- 内容中可直接换行
- 变量拼接(使用“”${变量}“)
简化对象写法
let a = "aString";
let func = function() {
console.log(this);
}
//es5写法
const obj = {
a = a,
func = func,
func1 = function() {
console.log(this);
}
}
//es6写法
const obj1 = {
a,
func,
func1() {
console.log(this)
}
}
箭头函数
- 声明方式
let func = (a, b, c) => {
console.log(a, b, c);
}
//当形参只有一个时可省略小括号,当语句只有一条时可省略大括号
let func1 = a => console.log(a);
- this是静态的,始终指向函数声明时的作用域下的this
- 箭头函数不能作为构造函数创建实例化对象
- 不能使用arguments保存实参
- 简写:当形参只有一个时可省略小括号,当函数体只有一条语句时可省略大括号,此时必须省略return,执行结果即作为函数返回值
- 适用场景:与this无关的回调,如定时器、数组的方法回调;
- 不适用的场景:与this有关的回调,如dom事件回调,对象方法等。
es6允许给函数形参赋初始值
- 可与解构赋值相结合
rest参数
es6引入rest参数,用于获取函数的实参,用来代替arguments
- rest参数必须在形参中写明,方式:三个点加名称
func(a,b,c,...other)
- 与arguments的区别:arguments无需显式声明;args是伪数组(本质是对象),rest是数组,可使用数组的所有api
扩展运算符号
作用:将数组转换为逗号分隔的参数序列
symbol数据类型
迭代器
- 应用:使用迭代器自定义遍历数据
生成器
生成器是es6提供的一种异步编程解决方案,本质是一个特殊的函数
声明方式
function * gen(){
}
//生成器的声明方式与普通函数的区别在于function和函数名之间多了一个星号
执行方式
function* gen() {
console.log(111);
yield '第一次';
//yield后可跟表达式或字面量
console.log(222);
yield '第二次';
console.log(333);
yield '第三' + '次';
console.log(444);
}
let gen1 = gen();
gen1.next();
gen1.next();
gen1.next();
gen1.next();
Promise
实例代码
//基本用法
<script>
let p = new Promise(function(resolve, reject) {
setTimeout(() => {
let data = "seccessfully."
// resolve(data);
let err = "failed"
reject(err);
}, 1000);
})
p.then(function(value) {
console.log(value);
}, function(reason) {
console.log(reason);
})
</script>
//promise封装ajax请求
<script>
const p = new Promise(function(resolve, reject) {
const address = 'https://api.a888piopen.top/getJoke'
const xhr = new XMLHttpRequest();
xhr.open("GET", address);
xhr.send();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status >= 200 && xhr.status <= 300) {
resolve(xhr.response)
} else {
reject(xhr.status)
}
}
}
})
p.then(function(value) {
console.log(value);
}, function(reason) {
// console.error(reason);
console.log("cuole!")
})
</script>
//promise封装读取文件
const fs = require('fs');
let p = new Promise(function(resolve, reject) {
fs.readFile('./some.md', (err, data) => {
if (err) reject(err);
resolve(data)
})
})
p.then(function(value) {
console.log(value.toString());
}, function(reason) {
console.log(reason);
})
promise的then()方法详解
then()方法的返回结果也是一个promise对象,对象的状态(promise的promiseState属性值)由回调函数的执行结果决定:如果回调函数中返回的结果是 非promise类型的数据类型,对象状态为成功,返回值(promise的promiseResult属性值)即为成功函数的返回值;如果回调函数中返回的结果是promise对象实例,则该promise对象实例的返回结果即为外层promise对象的返回值