2017-07-06 115 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中是有效的語法。