【发布时间】:2018-02-17 23:59:51
【问题描述】:
作为标题,如何检测浏览器中的 async/await es7 支持?
这可能吗?
【问题讨论】:
-
async/await 是 ES2017。
标签: javascript syntax async-await ecmascript-2017
作为标题,如何检测浏览器中的 async/await es7 支持?
这可能吗?
【问题讨论】:
标签: javascript syntax async-await ecmascript-2017
目前还没有完美的解决方案,但可以使用eval:
let isAsyncSupported;
try {
isAsyncSupported = eval(`typeof Object.getPrototypeOf(async function() {}).constructor === 'function'`);
} catch (exception) {
isAsyncSupported = false;
}
更多请看:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncFunction
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
【讨论】:
与任何其他句法特征一样,它应该被评估以便被检测到。由于eval 可以被限制,所以在启用 CSP 时这可能是不可能的:
let isAsync = true;
try {
eval('async () => {}');
} catch (e) {
if (e instanceof SyntaxError)
isAsync = false;
else
throw e; // throws CSP error
}
如果目标浏览器可能不支持某个功能,则应转译代码。
允许避免对eval 的 CSP 限制的替代方法是使用外部脚本来检测语法特征,as described here。
【讨论】: