### ES11新特性
#### 私有属性
> 只能在类的内部对其进行修改和访问
~~~javascript
class Person {
name; // 公有属性
#age; // 私有属性,
#weight;
constructor(name,age,weight){ // 构造法方法
this.name = name
this.#age = age // 符号'#'带上
this.#weight = weight
}
intro(){
console.log(this.name)
console.log(this.#age) // 在内的内部正常访问私有属性
console.log(this.#weight)
}
}
const girl = new Personn('小红',18,'45kg')
console.log(girl) // 正常访问
console.log(girl.#age) // 在类的外部无法访问私有属性
~~~
#### Promise.allSettled
> 接收一个promise数组,返回promise对象(永远是成功的状态)
>
> 返回的值是每一个promise的状态和结果
>
> [参考链接-allSettled](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled) [扩展阅读-Promise 中的三兄弟 .all(), .race(), .allSettled()](https://segmentfault.com/a/1190000020034361)
![image-20200718122325135](http://image.mdashen.com/pic/image-20200718122325135.png)
* Promise.all([p1,p2])
> 全部成功,才返回成功,有一个失败就返回失败
> Promise.all 和 Promise.allSettled常用于批量异步任务
#### 字符串扩展
##### String.prototype.matchAll
> 用来得到正则批量匹配得到的结果
~~~javascript
let str = `
<ul>
<li>
<a>肖申克的救赎</a>
<p>上映日期:1994-0910</p>
</li>
<li>
<a>阿甘正传</a>
<p>上映日期:1994-0716</p>
</li>
</ul>
`
const reg = /<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>/sg // [s](#正则扩展-dotAll模式)
const result = str.matchAll(reg)
// for (let v of result) { // 与下面...一个功能
// console.log(v)
// }
console.log([...result])
~~~
#### 可选链操作符?
> 按照操作符之前的属性是否有效,链式读取对象的属性或者使整个对象链返回 `undefined`
~~~javascript
function main(config){
const dbHost = config && config.db && config.db.host // config &&判断config是否存在
console.log(dbHost) // 当config存在,才能读取config.db
} // 不先判断,当config不存在,直接config.db会报错
main({
db:{
host:'192.168.0.2',
username:'root'
}
})
// 可选链操作符?.
const dbHost = config?.db?.host // 可以起到上述判断的作用
~~~
#### 动态import
> 当使用到需要导入的模块时,才导入。提升加载效率
~~~javascript
const btn = document.getElementById('btn')
btn.onclick = function(){
import('./hello.js').then(module=>{ // import返回promise对象,module就是导入的对象
module.hello() // hello()hello.js中一个普通方法
})
}
~~~
#### BigInt
> 用于大数值运算
~~~javascript
let n = 521n // 大整型
console.log(n,typeof(n)) // 521n "bigint"
let n1 = 521
BigInt(n1) // 普通整型转大整型 -> 521n
~~~
~~~JavaScript
let max = Number.MAX_SAFE_INTEGER // 9007199254740991
console.log(max)
console.log(max+1) // 正常
console.log(max+2) // 不正常,在向后加,有的正常有的不正常
console.log(BigInt(max))
console.log(BigInt(max)+BigInt(1)) // 正常,BigInt 不能直接与Int运算,要先转成BigInt
console.log(BigInt(max)+BigInt(2)) // 正常
~~~
#### globalThis
> 始终指向全局对象,无论执行环境是什么(浏览器、nodejs)
> 浏览器下指:Window
>
> nodejs下指:global
![image-20200718175918068](http://image.mdashen.com/pic/image-20200718175918068.png)