2017-07-06 20 views
5

Trong JavaScript, làm thế nào được báo cáo kết quả sau đây để được giải thích:ưu tiên vận hành:! và chờ đợi

cond1 && !await f() 

Đây là một đoạn trích từ dòng

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

bên trong một ứng dụng sản xuất. chrome có vẻ là tốt với nó, nhưng trên ios điều này gây ra một lỗi khi đọc

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

Có vẻ như nếu ios biến !await f() vào (!await)(f()) thay vì !(await f()).

Bây giờ cho câu hỏi của tôi: Theo số ECMA-262 giải thích chính xác dòng trên là gì?

P.S .: Chúng tôi đã sửa mã cho ios bằng cách thay đổi nó để

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

Dường như công cụ ios JS của bạn chưa hỗ trợ tính năng không đồng bộ/đang chờ. Bạn đang sử dụng phiên bản ứng dụng (trình duyệt) nào? – Bergi

+0

@Bergi tốt, thiết bị ios sản xuất của chúng tôi vui vẻ làm async/await đang nói khác. Họ chỉ bị nghẹt thở trên tuyên bố chính xác này. – niklasfi

+0

@Bergi về phiên bản: đó sẽ là phiên bản hiện tại. 10.3. http://caniuse.com/#search=await – niklasfi

Trả lời

2

này không có gì để làm với ưu tiên điều hành. Kể từ khi cả hai đều khai thác tiền tố unary, chỉ có một cách duy nhất biểu hiện này có thể được giải thích - tất cả các delete, void, typeof, +, -, ~, !await được phân tích cú pháp với mục tiêu sản xuất giống và có thể được lồng vào nhau tùy tiện. Và vâng, đó là cú pháp hợp lệ trong ES2017.

Các vấn đề liên quan