我可以在浏览器中检测到async / await吗?

时间:2017-09-09 04:03:19

标签: javascript syntax async-await ecmascript-2017

作为标题,如何在浏览器中检测async / await es7支持?

这可能吗?

2 个答案:

答案 0 :(得分:9)

与任何其他语法特征一样,应对其进行评估以便进行检测。由于可以限制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

答案 1 :(得分:2)

目前还没有完美的解决方案,但可以使用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