let/const基本使用
let与var差不多
const
- 保存的数据一旦被赋值就不能被修改
- 但如果赋值的是引用类型,那么就可以通过引用找到对应的对象,修改对象的内容
二者不可以重复
let/const是否有作用域提升
作用域提升:在声明变了的作用域中,如果这个变量可以在声明之前被访问,那么我们可以称之为作用域提升
let,const虽然被创建除了了,但是不能被访问,我认为不能称之为作用域提升
暂时性死区
块作用域顶部一直到变量声明完成之前,这个变量处在暂时性死区.
暂时性死区和定义的位置没有关系,和代码执行顺序有关系
let/const不会添加window
函数声明,内置函数,var都添加到了window所在的对象式环境记录中
而let,const这些被添加到了声明式环境记录中
块级作用域
let,const,class, function都具有块级作用域的限制
但注意function在作用域外面依然可以访问
字符串模版
1 | <script> |
模版字符串调用时如果有其他变量:
- 模板字符串将会被拆分
- 第一个元素是数组,是被插入模块拆分的字符串的组合
- 后面的元素是一个个模块字符串传入的内容
函数默认值
1 | function foo(args1="默认值", arg2) { |
- 注意有默认参数的形参尽量写在后面
- 有默认参数的形参是不会计算在length之内
展开语法
- 可以在函数调用/数组构造时,将数组表达式或string在语法层面展开
- 可以在构造字面量对象时,将对象表达式按key-value的方式展开
1 | const obj = { |
Symbol
用来生成一个独一无二的值生成后可以用来做属性名
1 | const s1 = Symbol() |
Set
1 | //创建Set |
常见方法
- add()
- delete
- has
- clear
- forEach(callback,[,args])
WeakSet
- 只能放对象类型,不能存放基本数据类型
- 对元素的引用是弱引用没如果没有其他引用对某个对象进行引用,GC可以对该对象进行回收
- 不能遍历
常见方法
add
delete
has
Map
可以用对象作为key,弥补了对象的不足
1 | <script> |
常见属性
size
常见方法:
set(key, value)
get(key)
has(key)
delete(key)
clear()
forEach(callback,[args])
WeakMap
- key只能使用对象
- key对对象的引用是弱引用
ES8
Object.values(obj) 获取所有值,补充了Object.keys
Object.entries()以数组形式获取一组组key values
字符串填充
- padstart 应用场景:对时间进行填充,对敏感数据进行处理
ES10
- flat(int 展开深度)的使用:将一个数组,按照指定的深度遍历,将遍历到的元素和子数组中的元素组成一个新数组
nums.flat(1)
flatMap().先map后flat
- Object.fromEntries把一个entries转化成Object
ES11
- Bigint
- ??空值合并运算符, info = info?? “默认值”
ES12
- FinalizationRegisry:可以让对象在被垃圾回收时请求一个回调函数
- WeakRefs: obj = new WeakRef(info) 对info的一个弱引用
- 逻辑赋值运算符: message || = “默认值” message ??=”默认值”
- xxx.replaceAll(string1, string2):把字符串xxx中所有的sting1全部替换为string2