JS高级知识总结02
let,const
函数增强
函数默认值
箭头函数
rest剩余参数
对象增强
变量作为键名
对象解构
展开运算符
引用赋值,浅拷贝,深拷贝
symbol类型
对象作为参数的弊端
思考如下代码
1 | let obj = { |
foo函数的本意是想要添加一个age属性,但是它不知道传入的obj中已经有了age属性而导致自己覆盖了age的。
当我们想要做类似的操作时,必须做到属性名独一无二,因此就有了symbol用来生成一个独一无二的值
1 | const s1 = Symbol() |
获取symbol对应的key
1 | console.log(Object.keys(obj)) ////['name'] 无法获取到symbol的键值 |
遍历symbol属性
1 | let symobls = Object.getOwnPropertySymbols(obj) |
description
可以在创建symbol时传入参数作为symbol的描述
1 | const a1 = Symbol('aaa') |
Symbol.for
通过symbol.for创建的symbol类型当传入相同的描述时,===成立
1 | const a1 = Symbol('aaa') |
Symbol.keyFor
获取symbol类型的key
1 | const a1 = Symbol('aaa') |
set
特点:不能有重复元素,会自动去重
属性
size属性
实例方法
add(value)
:添加某个值,返回 Set
结构本身(可以链式调用)。
delete(value)
:删除某个值,删除成功返回 true
,否则返回 false
。
has(value)
:返回一个布尔值,表示该值是否为 Set
的成员。
clear()
:清除所有成员,没有返回值。
遍历方法
keys()
:返回键名的遍历器。values()
:返回键值的遍历器。entries()
:返回键值对的遍历器。forEach()
:使用回调函数遍历每个成员。
1 | let set = new Set(['red', 'green', 'blue']) |
WeakSet
和set的区别:
只能存放对象类型
对对象都是弱引用,不能保证GC是否会回收
weakset不能遍历,没有size属性
map
1 | Map` 中存储的是 `key-value` 形式的键值对, 其中的 `key` 和 `value` 可以是任何类型的, 即对象也可以作为 `key |
属性
size属性
Map 对象的方法
set(key, val)
: 向Map
中添加新元素get(key)
: 通过键值查找特定的数值并返回has(key)
: 判断Map
对象中是否有Key
所对应的值,有返回true
,否则返回false
delete(key)
: 通过键值从Map
中移除对应的数据clear()
: 将这个Map
中的所有元素删除
遍历方法
keys()
:返回键名的遍历器values()
:返回键值的遍历器entries()
:返回键值对的遍历器forEach()
:使用回调函数遍历每个成员
1 | onst map = new Map([ |
数据类型转化
Map 转为数组
1 | let map = new Map() |
数组转为 Map
1 | Map: map = new Map(arr) |
index为键
Map 转为对象
1 | let obj = {} |
对象转为 Map
1 | for( let k of Object.keys(obj)){ |
WeakMap
WeakMap
结构与 Map
结构类似,也是用于生成键值对的集合。
- 只接受对象作为键名(
null
除外),不接受其他类型的值作为键名 - 键名是弱引用,键值可以是任意的,键名所指向的对象可以被垃圾回收,此时键名是无效的
- 不能遍历,方法有
get
、set
、has
、delete
为 DOM 元素添加事件监听时可以用到WeakMap 和 WeakSet,在垃圾回收机制方面会更优
ES8-padStart和padEnd
用于填充数字
1.对时间进行格式化,填充
1 | let hour = '5'.padStart(2,'0') //填充2位。用0来填充 |
2.对敏感数据进行格式化
隐藏身份证号银行卡手机号之类的
ES10-flat和flatMap
flat:
按照指定的深度递归数组,将遍历到的元素和子数组中的元素组合成为一个新的数组并返回,数组扁平化
flatMap:
先对所有元素应用 一次map操作,在做flat操作
ES10-entries和fromEntries
entries和obj的相互转化
1 | let obj = { |
ES10-trimStart和trimEnd
去除首部和尾部的空格
ES11-BigInt
可以准确表示比Number.Max_SAFE_INTEGER更大的数字
bigint的表示方式只需要在后面加上一个n
ES11-空值合并运算符
空值也可以被当作是有值,只有null和undefined才会走后面的逻辑
1 | let info = "" |
ES11-可选链
只有判断属性存在,才继续执行下一步操作
1 | const obj = { |
ES12-FinalizationRegistry
FinalizationRegistry对象可以让对象在被垃圾回收时请求一个回调
1 | let obj = { |
ES12-WeakRef
添加为弱引用,保证能被垃圾回收器回收
1 | let info = {name:'info'} |
ES12-逻辑赋值运算符
下面的两种写法等价
1 | message = message ||'默认值 ' |
ES12-replaceAll
String.replace只能体换一个,而replaceAll可以全部替换
ES13-at
字符串和数组取指定位置的值
ES13-hasOwn
对象属性判断方法,用于替换hasOwnProperty方法 。
hasOwn是类方法,hasOwnProperty是实例方法
hasOwnProperty当调用该方法的对象指向null的时候会报错,而Object为类方法则不会报错
ES13-类中增加新成员和私有属性
#开头的属性名为私有属性,外界无法访问
类属性(静态属性,使用static修饰的属性为静态属性)
静态代码块
如果这篇文章对你有帮助,可以bilibili关注一波 ~ !此外,如果你觉得本人的文章侵犯了你的著作权,请联系我删除~谢谢!