2017-07-06 63 views
5

在JavaScript中,如何来解释下面的语句:运算符优先级:!并等待

cond1 && !await f() 

这是从线

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

生产应用程序中的摘录。铬似乎与它的罚款,但在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(); 
} 
+0

它看起来像你的iOS JS引擎不支持异步/等待。您特别使用了哪个应用(浏览器)版本? – Bergi

+0

@Bergi好吧,我们的生产ios设备愉快地做异步/等待是说否则。他们只是扼杀在这个确切的说法。 – niklasfi

+0

@Bergi关于版本:这将是当前的一个。 10.3。 http://caniuse.com/#search=await – niklasfi

回答

2

这有没有关系运算符优先级。由于两者都是一元前缀运算符的话,只有一个办法这个表达式可以解释 - 所有的deletevoidtypeof+-~!await解析用相同的生产目标,并可以任意嵌套。是的,这在ES2017中是有效的语法。