1.变量:var、let、const
var : 变量提升、重复声明、window属性 、全局作用域和函数作用域
let : 无变量提升、无重复声明、无window属性、全局作用域和块级作用域{()}、暂时性死区(TDZ,同作用域下先声明,再应用)
const : 设置常量、声明时必须赋值、不可重复声明、不可更改、不能删除、不能重新赋值、块级作用域、没有变量提升
如果是引用类型,设置的指向Object.freeze(常量)
2.箭头函数
- 如果只有一个参数,圆括号“()”可以省略
- 函数体如果只有一句return语句,花括号也可以省略
// 定义一个箭头函数
let a = (arg)=>{ // 这里=>符号就相当于function关键字
return arg+=1
}
// 也可以简写为
let a = arg => arg+=1
普通函数和箭头函数的对比:
// 普通函数
var obj = {
say: function () {
setTimeout(function() {
console.log(this)
});
}
}
// 箭头函数
var obj = {
say: function () {
setTimeout(() => {
console.log(this)
});
}
}
obj.say(); // obj
//普通函数中的this指向调用函数时所在的对象
//箭头函数this指向函数定义时所在的对象
3.解构赋值
解构赋值必须遵守的的三条规则(要牢牢记住哦!!!!)
- 左右结构必须一样
- 右边必须是一个合法的数据
- 声明和赋值必须一句话完成,声明和赋值不能分开
4.ES6常用方法及语法
key():获取数组中所有元素的键名
value():获取数组中所有元素的数据
entries():获取数组中所有数据的键名和数据(键值对)
Object.isArray(obj):判断对象是否为数组
includes():判断字符串中是否包含某些字符串
startWith():如果在字符串的起始部分监测到指定文本则返回true
endsWith():如果在字符串的结束部分检测到指定文本则返回true
repeat():重复字符串
注:参数不能传负数和infinity
at():参数传入角标,返回值为角标对应的字符
padStart()/padEnd():不全指定位数
注:两个参数,第一个为位数。第二个是用什么补全
Array.from():用于将两类对象转为真正的数组
...运算符:扩展运算符,将一个数组转为用逗号分隔的参数序列
...应用:
- 复制数组(克隆数组)
- 合并数组
- 与解构赋值结合
- 将字符串转换为真正的数组
Array.of():用于将一数组,转换为数组
fill():数组实例(三个参数:第一个参数为替换成什么内容,第二个为替换的起始位置,第三个为替换的终止位置)
set和map结构:
set
set本身是一个构造函数,用来生成set数据结构。此结构不会添加重复的值
map
map结构就是键值对的结构。
proxy拦截:
proxy:在目标对象之前架设一层拦截,外界对该对象的访问。都必须先通过这层拦截,因此,可以对外界的访问进行过滤和改写。
get()
get()方法用于拦截某个属性的读取操作,参数为:目标对象、属性名、proxy实例本身(this关键字指向的那个对象)
set()
set方法是用来拦截某个属性的赋值操作,参数为:目标对象、属性名、proxy实例本身。
async命令
async函数返回一个 Promise 对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。
await命令
正常情况下,await命令后面是一个 Promise 对象。如果不是,会被转成一个立即resolve的 Promise 对象。
constructor()
constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。
super()
类继承。如果你要用类继承的话,里面一定要写super(),他是指定父类的this的,否则会报错
浏览器加载
defer与async的区别是:defer要等到整个页面在内存中正常渲染结束(DOM 结构完全生成,以及其他脚本执行完成),才会执行;async一旦下载完,渲染引擎就会中断渲染,执行这个脚本以后,再继续渲染。一句话,defer是“渲染完再执行”,async是“下载完就执行”。另外,如果有多个defer脚本,会按照它们在页面出现的顺序加载,而多个async脚本是不能保证加载顺序的。
ES6新语法
览器加载 ES6 模块,也使用<script>标签,但是要加入type="module"属性。浏览器对于带有type="module"的<script>,都是异步加载,不会造成堵塞浏览器,即等到整个页面渲染完,再执行模块脚本,等同于打开了<script>标签的defer属性。