JS運算符優(yōu)先級與表達(dá)式示例詳解
前言
運算符優(yōu)先級決定了表達(dá)式中運算執(zhí)行的先后順序,優(yōu)先級越高的運算符會先執(zhí)行。
運算符優(yōu)先級
很多時候由于對運算符優(yōu)先級的不確定,會用括號來確保表達(dá)式的執(zhí)行順序。如果搞清楚運算符的優(yōu)先級,即使不用括號也能確保表達(dá)式按照正確的順序執(zhí)行。
其實單純靠運算符的優(yōu)先級來確定表達(dá)式的執(zhí)行過程并不是一個絕對穩(wěn)妥的做法,比如 new a()['b'] 這樣的表達(dá)式就沒法套用運算符優(yōu)先級。當(dāng)然一般情況下,絕大多數(shù)表達(dá)式我們都可以利用運算符優(yōu)先級來判斷,如果確實遇到比較復(fù)雜的難以直觀判斷出來的情況還是要查詢 ECMAScript262 標(biāo)準(zhǔn)中的產(chǎn)生式。
表達(dá)式
左手表達(dá)式
左手表達(dá)式即 Left-Hand-Side Expression,即能出現(xiàn)在賦值運算左邊的表達(dá)式。幾乎所有的左手表達(dá)式都可以作為右手表達(dá)式,這在大部分編程語言中都是通用的。JS 中的左手表達(dá)式的詳細(xì)規(guī)則請看ECMAScript262-left-hand-side expression。標(biāo)準(zhǔn)中沒有定義右手表達(dá)式,因為合法的表達(dá)式只要不是左手表達(dá)式就是右手表達(dá)式,所以不需要在單獨定義。有一點需要注意的是 ++ 和 -- 的操作數(shù)也要是一個左手表達(dá)式。
一些細(xì)節(jié)
- 關(guān)聯(lián)性和優(yōu)先級一樣重要,關(guān)聯(lián)性決定了擁有相同優(yōu)先級的運算符的執(zhí)行順序。
- 優(yōu)先級為 19 的除了圖中 member運算、帶參數(shù)new ,還有帶標(biāo)簽的模版字符串(可以理解為和函數(shù)調(diào)用類似),new.target,super作為對象使用(和成員訪問相同)
- 函數(shù)調(diào)用的優(yōu)先級在圖中也是 19,但實際似乎優(yōu)先級是要低于 member運算 和單參數(shù) new 運算符的。當(dāng)函數(shù)調(diào)用后接 member 運算符整個式子還是函數(shù)調(diào)用等級的。
- 一元加、一元減和算術(shù)運算符的加減是不同的,一元加和一元減都會講操作數(shù)轉(zhuǎn)為 Number,這也是它可以將函數(shù)聲明轉(zhuǎn)為函數(shù)表達(dá)式的原因。
總結(jié)
到此這篇關(guān)于JS運算符優(yōu)先級與表達(dá)式的文章就介紹到這了,更多相關(guān)JS運算符優(yōu)先級與表達(dá)式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
千分位數(shù)字格式化(用逗號隔開 代碼已做了修改 支持0-9位逗號隔開)的JS代碼
這篇文章主要介紹了千分位數(shù)字格式化的JS代碼,有需要的朋友可以參考一下2013-12-12Firefox+FireBug使JQuery的學(xué)習(xí)更加輕松愉快
FireBug是FireFox下最強大的調(diào)試插件.利用它,可以讓JQuery的學(xué)習(xí)過程更加輕松愉快.2010-01-01