JS運(yùn)算符優(yōu)先級(jí)與表達(dá)式示例詳解
前言
運(yùn)算符優(yōu)先級(jí)決定了表達(dá)式中運(yùn)算執(zhí)行的先后順序,優(yōu)先級(jí)越高的運(yùn)算符會(huì)先執(zhí)行。
運(yùn)算符優(yōu)先級(jí)
很多時(shí)候由于對(duì)運(yùn)算符優(yōu)先級(jí)的不確定,會(huì)用括號(hào)來確保表達(dá)式的執(zhí)行順序。如果搞清楚運(yùn)算符的優(yōu)先級(jí),即使不用括號(hào)也能確保表達(dá)式按照正確的順序執(zhí)行。
其實(shí)單純靠運(yùn)算符的優(yōu)先級(jí)來確定表達(dá)式的執(zhí)行過程并不是一個(gè)絕對(duì)穩(wěn)妥的做法,比如 new a()[’b’] 這樣的表達(dá)式就沒法套用運(yùn)算符優(yōu)先級(jí)。當(dāng)然一般情況下,絕大多數(shù)表達(dá)式我們都可以利用運(yùn)算符優(yōu)先級(jí)來判斷,如果確實(shí)遇到比較復(fù)雜的難以直觀判斷出來的情況還是要查詢 ECMAScript262 標(biāo)準(zhǔn)中的產(chǎn)生式。
表達(dá)式
左手表達(dá)式
左手表達(dá)式即 Left-Hand-Side Expression,即能出現(xiàn)在賦值運(yùn)算左邊的表達(dá)式。幾乎所有的左手表達(dá)式都可以作為右手表達(dá)式,這在大部分編程語言中都是通用的。JS 中的左手表達(dá)式的詳細(xì)規(guī)則請(qǐng)看ECMAScript262-left-hand-side expression。標(biāo)準(zhǔn)中沒有定義右手表達(dá)式,因?yàn)楹戏ǖ谋磉_(dá)式只要不是左手表達(dá)式就是右手表達(dá)式,所以不需要在單獨(dú)定義。有一點(diǎn)需要注意的是 ++ 和 -- 的操作數(shù)也要是一個(gè)左手表達(dá)式。
一些細(xì)節(jié)
關(guān)聯(lián)性和優(yōu)先級(jí)一樣重要,關(guān)聯(lián)性決定了擁有相同優(yōu)先級(jí)的運(yùn)算符的執(zhí)行順序。 優(yōu)先級(jí)為 19 的除了圖中 member運(yùn)算、帶參數(shù)new ,還有帶標(biāo)簽的模版字符串(可以理解為和函數(shù)調(diào)用類似),new.target,super作為對(duì)象使用(和成員訪問相同) 函數(shù)調(diào)用的優(yōu)先級(jí)在圖中也是 19,但實(shí)際似乎優(yōu)先級(jí)是要低于 member運(yùn)算 和單參數(shù) new 運(yùn)算符的。當(dāng)函數(shù)調(diào)用后接 member 運(yùn)算符整個(gè)式子還是函數(shù)調(diào)用等級(jí)的。 一元加、一元減和算術(shù)運(yùn)算符的加減是不同的,一元加和一元減都會(huì)講操作數(shù)轉(zhuǎn)為 Number,這也是它可以將函數(shù)聲明轉(zhuǎn)為函數(shù)表達(dá)式的原因。總結(jié)
到此這篇關(guān)于JS運(yùn)算符優(yōu)先級(jí)與表達(dá)式的文章就介紹到這了,更多相關(guān)JS運(yùn)算符優(yōu)先級(jí)與表達(dá)式內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. 基于PHP做個(gè)圖片防盜鏈2. ASP.NET MVC使用Boostrap實(shí)現(xiàn)產(chǎn)品展示、查詢、排序、分頁3. .NET中實(shí)現(xiàn)對(duì)象數(shù)據(jù)映射示例詳解4. jscript與vbscript 操作XML元素屬性的代碼5. asp.net core 認(rèn)證和授權(quán)實(shí)例詳解6. php使用正則驗(yàn)證密碼字段的復(fù)雜強(qiáng)度原理詳細(xì)講解 原創(chuàng)7. XML在語音合成中的應(yīng)用8. 如何使用ASP.NET Core 配置文件9. 基于javaweb+jsp實(shí)現(xiàn)企業(yè)車輛管理系統(tǒng)10. ASP.NET MVC把數(shù)據(jù)庫中枚舉項(xiàng)的數(shù)字轉(zhuǎn)換成文字
