ES6
let、const、var的区别
区别 | var | let | const |
---|---|---|---|
是否有块级作用域 | × | ✔️ | ✔️ |
是否存在变量提升 | ✔️ | × | × |
是否添加全局属性 | ✔️ | × | × |
能否重复声明变量 | ✔️ | × | × |
是否存在暂时性死区 | × | ✔️ | ✔️ |
是否必须设置初始值 | × | × | ✔️ |
能否改变指针指向 | ✔️ | ✔️ | × |
const对象的属性可以修改吗?可以的。const只是保证这个变量指向的内存地址不能修改。
var
:无块级作用域,可重复声明,创建和初始化提升,挂载在windows上。
let
:有块级作用域,不可重复声明,创建被提升但初始化不会提升,暂时性死区。
const
:和let唯一的区别就是值不可修改。
箭头函数
特点:(更加简洁)
- 如果只有一个参数,可以不写参数的括号
- 如果返回值只有一句话,可以省略大括号,不用写return
- 如果函数体不需要返回值,且只有一句话,可以用void关键字替代大括号,最常见的场景就是调用一个函数
箭头函数没有自己的this
箭头函数在定义时就确定了this指向,之后也不会改变,this指向作用域的上一层
call、apply、bind也无法改变箭头函数的this指向
箭头函数不能作为构造函数使用。new一个箭头函数无法执行,new操作符的实现:1. 创建一个对象 2.将构造函数的作用域赋给新对象 3.指向构造函数中的代码,构造函数的this指向改对象 4.返回新对象。箭头函数无法改变this指向,所以无法执行2、3
javascriptfunction myNew(Fn, ...args) { // 1.创建一个空对象,继承构造函数的prototype属性 const object = Object.create(Fn.prototype); // 2.指向构造函数 const result = Fn.call(object, ...args); // 3.如果返回结果是对象,直接返回,否则返回默认this对象 return result instanceof Object ? result : object }
箭头函数没有prototype
箭头函数没有自己的arguments
箭头函数不能作为Generator函数
其他新特性:
- 扩展运算符
- 模板字符串
- Proxy
Map和WeakMap:
共同点:都是键值对的集合,api类似,都有set、get、has、delete
区别:
- Map可以通过size获取数量,通过clear清除所有成员,WeakMap的clear方法已经被移除了,如果清除的话,只能通过创建一个空的WeakMap替换原对象
- WeakMap的key只能是对象。所引用的对象都是弱引用,一旦引用的对象的其他引用贝壳清除了,垃圾回收就会释放对象的内存,不用删除引用。