小程序的运行环境

QQ小程序运行在三端:iOS(iPhone/iPad)、Android 和 用于调试的开发者工具。

三端的脚本执行环境以及用于渲染非原生组件的环境是各不相同的:

  • 在 iOS 上,小程序逻辑层的 javascript 代码运行在 JavaScriptCore 中,视图层是由 WKWebView 来渲染的,环境有 iOS8、iOS9、iOS10;

  • 在 Android 上,

    • 小程序逻辑层的 javascript 代码运行中 X5 JSCore 中,视图层是由 X5运行环境 - 图1 基于 Mobile Chrome 57 内核来渲染的;
  • 在 开发工具上,小程序逻辑层的 javascript 代码是运行在 NW.js运行环境 - 图2 中,视图层是由 Chromium 60 Webview 来渲染的。

运行限制

基于安全考虑,小程序中不支持动态执行 JS 代码,即:

  • 不支持使用 eval 执行 JS 代码
  • 不支持使用 new Function 创建函数

平台差异

尽管三端的环境是十分相似的,但是还是有些许区别:

  • JavaScript 语法和 API 支持不一致:语法上开发者可以通过开启 ES6ES5 的功能来规避;此外,小程序基础库内置了必要的Polyfill,来弥补API的差异。

  • QSS 渲染表现不一致:尽管可以通过开启样式补全来规避大部分的问题,还是建议开发者需要在 iOS 和 Android 上分别检查小程序的真实表现。

开发者工具仅供调试使用,最终的表现以客户端为准。

ES6支持情况

客户端 ES6 API 支持情况

QQ小程序已经支持了绝大部分的 ES6 API,具体表格如下:

  • tip: Array.values 不支持
  • tip: Proxy 不支持
    StringiOS8iOS9iOS10Android
    codePointAt
    normalize
    includes
    startsWith
    endsWith
    repeat
    String.fromCodePoint
ArrayiOS8iOS9iOS10Android
copyWithin
find
findIndex
fill
entries
keys
values
includes
Array.from
Array.of
NumberiOS8iOS9iOS10Android
isFinite
isNaN
parseInt
parseFloat
isInteger
EPSILON
isSafeInteger
MathiOS8iOS9iOS10Android
trunc
sign
cbrt
clz32
imul
fround
hypot
expm1
log1p
log10
log2
sinh
cosh
tanh
asinh
acosh
atanh
ObjectiOS8iOS9iOS10Android
is
assign
getOwnPropertyDescriptor
keys
getOwnPropertyNames
getOwnPropertySymbols
OtheriOS8iOS9iOS10Android
Symbol
Set
Map
Proxy
Reflect
Promise