JavaScript中的運(yùn)算符優(yōu)先級(jí)是一套規(guī)則坝茎。該規(guī)則在計(jì)算表達(dá)式時(shí)控制運(yùn)算符執(zhí)行的順序涤姊。具有較高優(yōu)先級(jí)的運(yùn)算符先于較低優(yōu)先級(jí)的運(yùn)算符執(zhí)行。例如嗤放,乘法的執(zhí)行先于加法思喊。
算數(shù)運(yùn)算符:
加+,減—次酌,乘*恨课,除/,求余%岳服,加加++剂公,減減——,
加減乘除求余運(yùn)算與數(shù)學(xué)上的用法完全一樣吊宋。
不過纲辽,加號(hào)+還有連接字符串的作用,其他運(yùn)算符還可以將字符串?dāng)?shù)字轉(zhuǎn)換成數(shù)值型,參見JavaScript中數(shù)據(jù)類型轉(zhuǎn)換總結(jié)中的隱式轉(zhuǎn)換部分拖吼。
++鳞上,——分為前置和后置,前置表示在使用該變量之前加/減1绿贞,后置表示在使用之后加/減1因块。
邏輯運(yùn)算符:
1.&&: 與運(yùn)算, 當(dāng)與運(yùn)算的兩個(gè)內(nèi)容都為true的時(shí)候籍铁,結(jié)果為true涡上,只要有一個(gè)內(nèi)容為false,結(jié)果都是false拒名,&& 可以讀作“并且”
2.||: 或運(yùn)算吩愧, 當(dāng)或運(yùn)算的兩個(gè)內(nèi)容都為false的時(shí)候,結(jié)果為false增显,只要有一個(gè)內(nèi)容為true雁佳,結(jié)果都是true,|| 可以讀作“或者”
3.!: 非運(yùn)算同云, 取反運(yùn)算糖权,當(dāng)內(nèi)容為true時(shí),取反結(jié)果為false炸站,當(dāng)內(nèi)容為false時(shí)星澳,取反結(jié)果為true
補(bǔ)充:
&&與||的其他用法
&&
如果兩個(gè)操作數(shù)都不是布爾類型
且兩個(gè)數(shù)值轉(zhuǎn)換成布爾類型都是true,返回第二個(gè)操作數(shù)
如果有一個(gè)操作數(shù)轉(zhuǎn)換成布爾類型是false旱易,返回這個(gè)數(shù)
var b=undefined&&null
console.log(b);
返回undefined
||
如果兩個(gè)操作數(shù)都不是布爾類型
第一個(gè)數(shù)轉(zhuǎn)換成布爾類型為true禁偎,則不往下看,返回第一個(gè)數(shù)
如果第二個(gè)數(shù)轉(zhuǎn)換成布爾類型為true阀坏,則返回第二個(gè)數(shù)值如暖。
比較運(yùn)算符:
, <, >= ,<=, == ,!=,===,!==
, <, >= ,<=和數(shù)學(xué)里表示的含義完全一樣。下面四個(gè)運(yùn)算符剛開始接觸會(huì)有點(diǎn)迷惑忌堂。
== 相等操作符
如果兩個(gè)操作數(shù)相等盒至,則返回 true。
!= 不相等操作符
如果兩個(gè)操作數(shù)不相等士修,則返回 true妄迁。
這兩個(gè)操作符都會(huì)先轉(zhuǎn)換操作數(shù)(通常稱為強(qiáng)制轉(zhuǎn)型),然后再比較它們的相等性李命。在轉(zhuǎn)換不同的數(shù)據(jù)類型時(shí),相等和不相等操作符遵循下列基本規(guī)則:
1箫老、 如果有一個(gè)操作數(shù)是布爾值封字,則在比較相等性之前先將其轉(zhuǎn)換為數(shù)值——false 轉(zhuǎn)換為 0,而true 轉(zhuǎn)換為 1;
2阔籽、如果一個(gè)操作數(shù)是字符串流妻,另一個(gè)操作數(shù)是數(shù)值,在比較相等性之前先將字符串轉(zhuǎn)換為數(shù)值笆制;
3绅这、 如果一個(gè)操作數(shù)是對(duì)象,另一個(gè)操作數(shù)不是在辆,則調(diào)用對(duì)象的 valueOf()方法证薇,用得到的基本類型值按照前面的規(guī)則進(jìn)行比較;
這兩個(gè)操作符在進(jìn)行比較時(shí)則要遵循下列規(guī)則匆篓。
1浑度、 null 和 undefined 是相等的。
2鸦概、 要比較相等性之前箩张,不能將 null 和 undefined 轉(zhuǎn)換成其他任何值。
3窗市、 如果有一個(gè)操作數(shù)是 NaN先慷,則相等操作符返回 false,而不相等操作符返回 true咨察。重要提示:
即使兩個(gè)操作數(shù)都是 NaN论熙,相等操作符也返回 false扎拣;因?yàn)榘凑找?guī)則赴肚, NaN 不等于 NaN。
如果兩個(gè)操作數(shù)都是對(duì)象二蓝,則比較它們是不是同一個(gè)對(duì)象誉券。如果兩個(gè)操作數(shù)都指向同一個(gè)對(duì)象,
則相等操作符返回 true刊愚;否則踊跟,返回 false。
下表列出了一些特殊情況及比較結(jié)果:
表達(dá)式值 | 表達(dá)式值 |
---|---|
null == undefined true | true == 1 true |
"NaN" == NaN false | true == 2 false |
5 == NaN false | undefined == 0 false |
NaN == NaN false | null == 0 false |
NaN != NaN true | "5"==5 true |
false == 0 true | 鸥诽。商玫。。 |
=== 全等操作符
在兩個(gè)操作數(shù)未經(jīng)轉(zhuǎn)換就相等的情況下返回 true牡借。即數(shù)值和類型都相同拳昌。
var result1 = ("55" == 55); //true,因?yàn)檗D(zhuǎn)換后相等
var result2 = ("55" === 55); //false钠龙,因?yàn)椴煌臄?shù)據(jù)類型不相等
!== 不全等操作符
在兩個(gè)操作數(shù)未經(jīng)轉(zhuǎn)換就不相等的情況下返回 true炬藤。數(shù)據(jù)類型不同就不等御铃。
var result1 = ("55" != 55); //false,因?yàn)檗D(zhuǎn)換后相等
var result2 = ("55" !== 55); //true沈矿,因?yàn)椴煌臄?shù)據(jù)類型不相等
賦值運(yùn)算符:
=上真,+=,-=羹膳,*=睡互,/=
簡(jiǎn)單的賦值操作符由等于號(hào)(=)表示,其作用就是把右側(cè)的值賦給左側(cè)的變量陵像。
如果在等于號(hào)(=)前面再添加乘性操作符就珠、加性操作符或位操作符,就可以完成復(fù)合賦值操作蠢壹。
num = num + 10; 等同于num += 10;
設(shè)計(jì)這些操作符的主要目的就是簡(jiǎn)化賦值操作嗓违。使用它們不會(huì)帶來任何性能的提升。
三元運(yùn)算符:
? :
舉個(gè)例子:
var max = (num1 > num2) ? num1 : num2;
在這個(gè)例子中图贸, max 中將會(huì)保存一個(gè)最大的值蹂季。這個(gè)表達(dá)式的意思是:如果 num1 大于 num2(關(guān)系表達(dá)式返回 true),則將 num1 的值賦給 max疏日;如果 num1 小于或等于 num2(關(guān)系表達(dá)式返回 false)偿洁,則將 num2 的值賦給 max。
位運(yùn)算符:
JavaScript也有位運(yùn)算符沟优,需要先轉(zhuǎn)換成16進(jìn)制數(shù)進(jìn)行運(yùn)算涕滋,在開發(fā)中好像還沒有用到過,了解一下即可挠阁。
javascript 中運(yùn)算符優(yōu)先級(jí)
優(yōu)先級(jí) | 運(yùn)算類型 | 關(guān)聯(lián)性 | 運(yùn)算符 |
---|---|---|---|
20 | 圓括號(hào) | n/a | ( ... ) |
19 | 成員訪問 | 從左到右 | ... . ... |
19 | 需計(jì)算的成員訪問 | 從左到右 | ...[ ... ] |
19 | new (帶參數(shù)列表) | n/a | new ... ( ... ) |
19 | 函數(shù)調(diào)用 | 從左到右 | ... ( ... ) |
18 | new (無參數(shù)列表) | 從左到右 | new ... |
17 | 后置遞增(運(yùn)算符在后) | n/a | ... ++ |
17 | 后置遞減(運(yùn)算符在后) | n/a | ... -- |
16 | 邏輯非 | 從右到左 | ! ... |
16 | 按位非 | 從右到左 | ~ ... |
16 | 一元加法 | 從右到左 | + ... |
16 | 一元減法 | 從右到左 | - ... |
16 | 前置遞增 | 從右到左 | ++ ... |
16 | 前置遞減 | 從右到左 | -- ... |
16 | typeof | 從右到左 | typeof ... |
16 | void | 從右到左 | void ... |
16 | delete | 從右到左 | delete ... |
15 | 冪 | 從右到左 | ... ** ... |
14 | 乘法 | 從左到右 | ... * ... |
14 | 除法 | 從左到右 | ... / ... |
14 | 取模 | 從左到右 | ... % ... |
13 | 加法 | 從左到右 | ... + ... |
13 | 減法 | 從左到右 | ... - ... |
12 | 按位左移 | 從左到右 | ... << ... |
12 | 按位右移 | 從左到右 | ... >> ... |
12 | 無符號(hào)右移 | 從左到右 | ... >>> ... |
11 | 小于 | 從左到右 | ... < ... |
11 | 小于等于 | 從左到右 | ... <= ... |
11 | 大于 | 從左到右 | ... > ... |
11 | 大于等于 | 從左到右 | ... >= ... |
11 | in | 從左到右 | ... in ... |
11 | instanceof | 從左到右 | ... instanceof ... |
10 | 等號(hào) | 從左到右 | ... == ... |
10 | 非等號(hào) | 從左到右 | ... != ... |
10 | 全等號(hào) | 從左到右 | ... === ... |
10 | 非全等號(hào) | 從左到右 | ... !== ... |
9 | 按位與 | 從左到右 | ... & ... |
8 | 按位異或 | 從左到右 | ... ^ ... |
7 | 按位或 | 從左到右 | ... | ... |
6 | 邏輯與 | 從左到右 | ... && ... |
5 | 邏輯或 | 從左到右 | ... || ... |
4 | 條件運(yùn)算符 | 從右到左 | ... ? ... : ... |
3 | 賦值 | 從右到左 | ... = ... |
3 | 賦值 | 從右到左 | ... += ... |
3 | 賦值 | 從右到左 | ... -= ... |
3 | 賦值 | 從右到左 | ... /= ... |
3 | 賦值 | 從右到左 | ...% = ... |
3 | 賦值 | 從右到左 | ... *= ... |
2 | yield | 從右到左 | yield ... |
2 | yield* | 從右到左 | yield* ... |
1 | 展開運(yùn)算符 | 從左到右 | ... ... |
0 | 逗號(hào) | 從左到右 | ... , ... |