小程序的运行环境
QQ小程序运行在三端:iOS(iPhone/iPad)、Android 和 用于调试的开发者工具。
三端的脚本执行环境以及用于渲染非原生组件的环境是各不相同的:
在 iOS 上,小程序逻辑层的 javascript 代码运行在 JavaScriptCore 中,视图层是由 WKWebView 来渲染的,环境有 iOS8、iOS9、iOS10;
在 Android 上,
- 小程序逻辑层的 javascript 代码运行中 X5 JSCore 中,视图层是由 X5 基于 Mobile Chrome 57 内核来渲染的;
- 在 开发工具上,小程序逻辑层的 javascript 代码是运行在 NW.js 中,视图层是由 Chromium 60 Webview 来渲染的。
运行限制
基于安全考虑,小程序中不支持动态执行 JS 代码,即:
- 不支持使用
eval
执行 JS 代码 - 不支持使用
new Function
创建函数
平台差异
尽管三端的环境是十分相似的,但是还是有些许区别:
JavaScript
语法和 API 支持不一致:语法上开发者可以通过开启ES6
转ES5
的功能来规避;此外,小程序基础库内置了必要的Polyfill,来弥补API的差异。QSS
渲染表现不一致:尽管可以通过开启样式补全来规避大部分的问题,还是建议开发者需要在 iOS 和 Android 上分别检查小程序的真实表现。
开发者工具仅供调试使用,最终的表现以客户端为准。
ES6支持情况
客户端 ES6 API 支持情况
QQ小程序已经支持了绝大部分的 ES6 API,具体表格如下:
tip
:Array.values
不支持tip
:Proxy
不支持String iOS8 iOS9 iOS10 Android codePointAt normalize ✘ ✘ includes startsWith endsWith repeat String.fromCodePoint
Array | iOS8 | iOS9 | iOS10 | Android |
---|---|---|---|---|
copyWithin | ||||
find | ||||
findIndex | ||||
fill | ||||
entries | ||||
keys | ||||
values | ✘ | ✘ | ||
includes | ✘ | |||
Array.from | ||||
Array.of |
Number | iOS8 | iOS9 | iOS10 | Android |
---|---|---|---|---|
isFinite | ||||
isNaN | ||||
parseInt | ||||
parseFloat | ||||
isInteger | ||||
EPSILON | ||||
isSafeInteger |
Math | iOS8 | iOS9 | iOS10 | Android |
---|---|---|---|---|
trunc | ||||
sign | ||||
cbrt | ||||
clz32 | ||||
imul | ||||
fround | ||||
hypot | ||||
expm1 | ||||
log1p | ||||
log10 | ||||
log2 | ||||
sinh | ||||
cosh | ||||
tanh | ||||
asinh | ||||
acosh | ||||
atanh |
Object | iOS8 | iOS9 | iOS10 | Android |
---|---|---|---|---|
is | ||||
assign | ||||
getOwnPropertyDescriptor | ||||
keys | ||||
getOwnPropertyNames | ||||
getOwnPropertySymbols |
Other | iOS8 | iOS9 | iOS10 | Android |
---|---|---|---|---|
Symbol | ||||
Set | ||||
Map | ||||
Proxy | ✘ | ✘ | ✘ | |
Reflect | ||||
Promise |