運算符優(yōu)先級確定彼此之間解析運算符的方式。
具有較高優(yōu)先級的運算符將成為具有較低優(yōu)先級的運算符的操作數(shù)。
在下面的示例中,乘法的優(yōu)先級高于加法,這決定了運算的結(jié)果。
// 首先將3乘以5,然后加10 var x = 10 + 3 * 5;測試看看?/?
相反,如果我們想首先運行加法運算,則應將其分組在括號中,該括號始終具有最高優(yōu)先級。
// 首先將10和3相加,然后乘以5 var x = (10 + 3) * 5;測試看看?/?
使用括號時,首先要計算括號內(nèi)的運算。
當許多運算具有相同的優(yōu)先級(例如加法和減法)時,它們是從左到右計算的:
var x = 10 + 3 - 5;測試看看?/?
表達式求值也受操作符結(jié)合性的影響。
結(jié)合性是指整個表達式求值的方向(從右到左或從左到右)。
如果一個表達式中出現(xiàn)兩個或多個具有相同優(yōu)先級的操作符,那么將首先計算哪個操作符?算子結(jié)合性回答了這個問題。
請參考下表以解決JavaScript中的任何關(guān)聯(lián)或優(yōu)先級問題
運算符 | 使用描述 | 運算符結(jié)合 | 運算符優(yōu)先級 |
---|---|---|---|
() | 方法/功能調(diào)用,分組 | 左到右 | 最高- 1 |
[] | 陣列存取 | 左到右 | 1 |
. | 對象屬性訪問 | 左到右 | 1 |
++ | 自增 | 右到左 | 2 |
-- | 自減 | 右到左 | 2 |
- | 減法 | 右到左 | 2 |
! | 邏輯非 | 右到左 | 2 |
~ | 按位非 | 右到左 | 2 |
delete | 刪除數(shù)組值或?qū)ο髮傩?/td> | 右到左 | 2 |
new | 創(chuàng)建一個對象 | 右到左 | 2 |
typeof | 返回數(shù)據(jù)類型 | 右到左 | 2 |
void | 不指定要返回的值 | 右到左 | 2 |
/ | 除法 | 左到右 | 3 |
* | 乘法 | 左到右 | 3 |
% | 求模 | 左到右 | 3 |
+ | 加法 | 左到右 | 4 |
+ | 字符串拼接 | 左到右 | 4 |
- | 減法 | 左到右 | 4 |
>> | 按位右移 | 左到右 | 5 |
<< | 按位左移 | 左到右 | 5 |
>, >= | 大于,大于或等于 | 左到右 | 6 |
<, <= | 小于,小于或等于 | 左到右 | 6 |
== | 相等 | 左到右 | 7 |
!= | 不等 | 左到右 | 7 |
=== | 一致/嚴格相等(相同的數(shù)據(jù)類型) | 左到右 | 7 |
!== | 不一致/嚴格不相等(不相同的數(shù)據(jù)類型) | 左到右 | 7 |
& | 按位與 | 左到右 | 8 |
^ | 按位異或 | 左到右 | 9 |
| | 按位或 | 左到右 | 10 |
&& | 邏輯與 | 左到右 | 11 |
|| | 邏輯或 | 左到右 | 12 |
?: | 條件分支 | 左到右 | 13 |
= | 賦值 | 右到左 | 14 |
*=, /=, %=, +=,, -=, <<=, >>=, >>>=, &=, ^=, |= | 根據(jù)前面的運算符進行分配 | 右到左 | 14 |
, | 多重評估 | 左到右 | 最低:15 |