2017-07-06 21 views
5

जावास्क्रिप्ट में कैसे निम्नलिखित बयान में व्याख्या की जा करने के लिए है:ऑपरेटर प्राथमिकता:! और इंतजार

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 के अनुसार उपरोक्त रेखा की सही व्याख्या क्या है?

पी.एस .: हम

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

ऐसा लगता है कि आपके आईओएस जेएस इंजन अभी भी async/await का समर्थन नहीं करता है। आप विशेष रूप से किस ऐप (ब्राउज़र) संस्करण का उपयोग कर रहे हैं? – Bergi

+0

@ बरगी अच्छी तरह से, हमारे उत्पादन आईओएस उपकरण खुशी से एसिंक/प्रतीक्षा कर रहे हैं अन्यथा कह रहे हैं। वे केवल इस सटीक बयान पर चकित हैं। – niklasfi

+0

@ बर्गि संस्करण के बारे में: यह वर्तमान वाला होगा। 10.3। http://caniuse.com/#search=await – niklasfi

उत्तर

2

करने के लिए इसे बदल कर iOS के लिए कोड तय यह ऑपरेटर पूर्वता के साथ कोई संबंध नहीं है है। delete, void, typeof, +, -, ~, ! और await के सभी एक ही उत्पादन लक्ष्य के साथ पार्स कर रहे हैं और मनमाने ढंग से नेस्ट जा सकता है - के बाद से दोनों एकल उपसर्ग ऑपरेटर हैं, वहाँ केवल एक ही तरीका है इस अभिव्यक्ति व्याख्या की जा सकती है। और हाँ, यह ES2017 में मान्य वाक्यविन्यास है।

संबंधित मुद्दे