ES2020新特性

不是所有的都会记录 只记录一些我目前能理解的和我觉得比较有用的

类的私有变量和方法

通过 # 代表私有变量和方法,在class外部无法访问 (相当于private)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Num{
#privateNum = 0 //私有变量
static #privateStaticNum = 0 //静态私有变量
add(){
this.#privateNum++
Num.#privateStaticNum++
}
print(){
console.log(this.#privateNum,Num.#privateStaticNum)
}
}
var a = new Num()
a.add()
a.print() // 1 1
console.log(a.#privateNum) // SyntaxError
console.log(Num.#privateStaticNum) // SyntaxError

在MDN和其他的一些大佬的总结里面也写了可以定义私有方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* 
类似于以这种形式
不知道是什么原因会报错 unexpected token
*/
class Method(){
#privateStaticMethod(){
return 'hello world'
}
publicStaticMethod(){
return #privateStaticMethod()
}

/*
另外看到有人总结是用这种形式
可以正常运行 但是我感觉这种形式就是私有变量的定义赋给一个函数而已?
*/
#privateStaticMethod = ()=>{ ... }
}

空值合并运算符(Nullish coalescing Operator)

和 || 的作用类似,但是 || 会将空字符串、0、false等直接覆盖,可能会造成一些问题,
?? 运算符只针对 null、undefined 进行覆盖

1
2
const b = '' || 123     // 123
const a = '' ?? 123 // ''

可选链(Optional chaining)

简化繁琐重复的前置校验操作

1
2
3
4
5
6
7
8
9
10
11
const user = {
info: {
name: {
getName: function () {
return 'doreen'
}
}
}
}
let names = user && user.info && user.info.name && user.info.name.getName && user.info.name.getName()
let name = user?.info?.name?.getName?.() // => user?.info?.name?.getName()

dynamic-import

之前的按需引入是静态import、目前更新的是动态的import()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// 用法区别:static import没有括号,dynamic import() 带有括号
// static import : 有声明提升、一般放在头部位置
import name from 'url'

// dynamic import : 放在任意位置
const name = import('url')

/*
test.js:

export {xxx} 引入的时候 import {xxx} from 'xxx' 可以有多个
export default function(){...} / export default { a(){...},b(){...} }
引入的时候 import xxx from 'xxx' 只能写一次
*/
const add = (n,m)=>{
return n+m
}
export { add }


// a.js:
// import()相当于一个promise的实例对象
const doAdd = async (n,m)=>{
const foo = await import('./test.js')
console.log(foo.add(n,m))
}
const doAdd = (n,m)=>{
import('./test.js').then(res=>{
console.log(res.add(n,m))
})
}
doAdd(1,2)

globalThis

提供了一个标准的方式去获取不同环境下的全局对象(gloabl、window)
在web下能正常打印,但是在node下还是不能正常输出?

参考:

https://blog.csdn.net/duyujian706709149/article/details/104014127
https://segmentfault.com/a/1190000022006869
https://www.jb51.net/article/178289.htm
MDN

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2019-2023 John Doe
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信