### 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)

* 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
