欧美日韩精品一区二区在线线,一级无码在线收看,精品国产高清91,久久精品欧美电影

# JavaScript 支持情況

# 運行限制

基于安全考慮,小程序中不支持動態(tài)執(zhí)行 JS 代碼,即:

  • 不支持使用 eval 執(zhí)行 JS 代碼
  • 不支持使用 new Function 創(chuàng)建函數
    • new Function('return this') 除外

# 標準 ECMAScript 支持

小程序的 JS 執(zhí)行環(huán)境 在不同平臺上的執(zhí)行環(huán)境存在差異,因此導致不同平臺對 ECMAScript 標準的支持存在差異。

小程序基礎庫為了盡量抹平這些差異,內置了一份 core-js Polyfill。core-js 可以將平臺環(huán)境缺失的標準 API 補齊。

需要注意的是,平臺對 ECMAScript 語法的支持差異無法抹平,當你需要使用一些高級語法時,如 async/await 時,則需要借助 代碼轉換工具 來支持這些語法。

# 無法被 Polyfill 的 API

以下 API 在部分低版本客戶端中無法使用,請注意盡量避免使用

  • Proxy 對象

# 與標準的差異

# Promise 時序差異

由于 iOS JavaScriptCore 的限制,iOS 15 及以下的 Promise 是一個使用 setTimeout 模擬的 Polyfill。這意味著 Promise 觸發(fā)的任務為普通任務,而非微任務,進而導致 在 iOS15 及以下的 Promise 時序會和標準存在差異。

iOS 16 及以上不存在差異。

var arr = []

setTimeout(() => arr.push(6), 0)
arr.push(1)
const p = new Promise(resolve => {
  arr.push(2)
  resolve()
})
arr.push(3)
p.then(() => arr.push(5))
arr.push(4)
setTimeout(() => arr.push(7), 0)

setTimeout(() => {
  // 應該輸出 [1,2,3,4,5,6,7]
  // 在 iOS15 小程序環(huán)境,這里會輸出 [1,2,3,4,6,5,7]
  console.log(arr)
}, 1000)

關于普通任務和微任務的區(qū)別可以查看這篇文章

# 如何判斷當前環(huán)境需要哪些 Polyfill & 代碼轉換目標

特定的小程序基礎庫版本有最低微信客戶端版本要求,如基礎庫 v2.15.0 要求安卓最低版本 7.0.22,iOS 最低版本 7.0.20。

而特定的客戶端版本有最低操作系統版本要求,如 iOS 7.0.20 要求最低 iOS 10。

從而,當指定特定小程序基礎庫版本時(可以在 小程序管理頁 【設置】-【基本設置】-【基礎庫最低版本設置】中設置),我們能夠得到最低需要支持的執(zhí)行環(huán)境。

具體數據可以從 這個開源庫 中獲得。