运算符优先级:!和await

7
在JavaScript中,以下语句应如何解释:
cond1 && !await f()

这是一段来自该行的摘录。
if(cond1 && !await f()){
    do_stuff();
}

在一个生产应用程序中,Chrome 看起来没问题,但在 iOS 上会出现错误,提示为“

”。
unexpected identifier 'f'. Expected ')' to end an if condition.

看起来 iOS 将 !await f() 转换为 (!await)(f()),而不是 !(await f())

现在我有一个问题:根据 ECMA-262,上述行的正确解释是什么?

p.s.:我们已经通过将代码更改为以下内容来修复 iOS 中的问题:

var f_result = await f();
if(cond1 && !f_result){
    do_stuff();
}

看起来你的iOS JS引擎还不支持async/await。你具体使用的是哪个应用程序(浏览器)版本? - Bergi
@Bergi 好吧,我们的生产 iOS 设备愉快地执行 async/await,否则就会出现这种情况。他们只在这个确切的语句上咳嗽。 - niklasfi
@Bergi 关于版本:那应该是当前版本。10.3。http://caniuse.com/#search=await - niklasfi
看起来那是一个bug。报告它。 - Bergi
1个回答

3

这与运算符优先级无关。由于它们都是一元前缀运算符,因此只有一种方式可以解释这个表达式 - 所有的deletevoidtypeof+-~!await都使用相同的产生目标进行解析,并且可以任意嵌套。是的,在ES2017中这是有效的语法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接