Execution restrictions
For security reasons, mini games do not support dynamic execution of JavaScript code. Specifically:
eval
is not supported for executing JavaScript code.
new Function
is not supported for creating functions.
Standard ECMAScript support
The mini games JavaScript Runtime Environment varies across different platforms, leading to differences in ECMAScript standard support. To minimize these differences, the mini game base library includes a core-js Polyfill. core-js can fill in the missing standard APIs in the platform environment. However, it is important to note that differences in platform support for ECMAScript syntax cannot be completely smoothed out. When you need to use advanced syntax, such as async/await, you will need to enable the "ES6 to ES5 conversion" feature to support these syntaxes. APIs that cannot be polyfill
The following APIs cannot be used in some older versions of the client, so it is advisable to avoid using them: Proxy objects.
Differences from the standards
Promise timing differences
Due to limitations of iOS JavaScriptCore, Promise in iOS 15 and below is a polyfill simulated using setTimeout
. This means that tasks triggered by Promise
are treated as regular tasks rather than microtasks, leading to timing differences from the standard on iOS 15 and below.
There are no such differences on iOS 16 and above.
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(() => {
console.log(arr)
}, 1000)