必備知識:前面課程的學習
概述
本章主要介紹 JavaScript 的表達式和運算符,包括了賦值稚照,比較蹂空,算數(shù)俯萌,按位,邏輯上枕,字符串咐熙,三元等等。列舉所有的運算符姿骏,但是不會全部講解糖声,只講解實際編程中會用到的幾種。
運算符(Operators)
JavaScript 擁有如下類型的運算符:
- 賦值運算符
- 比較運算符
- 算數(shù)運算符
- 按位運算符
- 邏輯運算符
- 字符串運算符
- 條件 (三元) 運算符
- 逗號運算符
- 一元運算符
- 關(guān)系運算符
JavaScript 擁有二元和一元運算符分瘦, 和一個特殊的三元運算符(條件運算符)蘸泻。
一個二元運算符需要兩個操作數(shù),分別在運算符的前面和后面:
操作數(shù)1 運算符 操作數(shù)2
operand1 operator operand2
例如, 3+4 或 xy*嘲玫。
一個一元運算符需要一個在運算符前面或后面的操作數(shù):
運算符 操作數(shù)
operator operand
或
操作數(shù) 運算符
operand operator
例如, x++ 或 ++x悦施。
賦值運算符
一個賦值運算符賦一個基于它右邊操作數(shù)值的值給它左邊的操作數(shù)。最簡單的賦值運算符是等于(=
)去团,將右邊的操作數(shù)值賦給左邊的操作數(shù)抡诞。那么 x = y 就是將 y 的值賦給 x。
在下面的表格中列出了有一些為速記操作的復合賦值運算符:
名字 | 速記操作 | 等同于 | ||
---|---|---|---|---|
賦值 | x = y |
x = y |
||
加法賦值 | x += y |
x = x + y |
||
減法賦值 | x -= y |
x = x - y |
||
乘法賦值 | x *= y |
x = x * y |
||
除法賦值 | x /= y |
x = x / y |
||
求余賦值 | x %= y |
x = x % y |
||
求冪賦值 | x **= y |
x = x ** y |
||
左移位賦值 | x <<= y |
x = x << y |
||
右移位賦值 | x >>= y |
x = x >> y |
||
無符號右移位賦值 | x >>>= y |
x = x >>> y |
||
按位與賦值 | x &= y |
x = x & y |
||
按位異或賦值 | x ^= y |
x = x ^ y |
||
按位或賦值 | `x | = y` | `x = x | y` |
比較運算符
一個比較運算符比較它的操作數(shù)并返回一個機遇表達式是否為真的邏輯值土陪。操作數(shù)可以是數(shù)字昼汗,字符串,邏輯鬼雀,對象值顷窒。字符串比較是基于標準的字典順序,使用 Unicode 值源哩。在多數(shù)情況下鞋吉,如果兩個操作數(shù)不是相同的類型, JavaScript 會嘗試轉(zhuǎn)換它們?yōu)榍‘數(shù)念愋蛠肀容^励烦。這種行為通常發(fā)生在數(shù)字作為操作數(shù)的比較谓着。類型轉(zhuǎn)換的例外是使用 ===
和 !==
操作符,它們會執(zhí)行嚴格的平等和非平等比較坛掠。這些運算符不會在檢查想等之前轉(zhuǎn)換操作數(shù)的類型赊锚。下面的表格描述了該示例代碼中的各比較運算符:
var var1 = 3, var2 = 4;
運算符 | 描述 | 返回true的示例1 | 返回true的示例2 |
---|---|---|---|
等于 (== ) |
如果兩邊操作數(shù)相等時返回true。 | 3 == var1 | "3" == var1 |
不等于 (!= ) |
如果兩邊操作數(shù)不相等時返回true却音。 | var1 != 4 | var2 != "3" |
全等于 (=== ) |
兩邊操作數(shù)相等且類型相同時返回true改抡。 | 3 === var1 | 4 === var2 |
不全等于 (!== ) |
兩邊操作數(shù)不相等或類型不同時返回true。 | var1 !== "3" | 3 !== '3' |
大于 (> ) |
左邊的操作數(shù)大于右邊的操作數(shù)返回true系瓢。 | var2 > var1 | "12" > 2 |
大于等于 (>= ) |
左邊的操作數(shù)大于或等于右邊的操作數(shù)返回true阿纤。 | var2 >= var1 | var1 >= 3 |
小于 (< ) |
左邊的操作數(shù)小于右邊的操作數(shù)返回true。 | var1 < var2 | "2" < 12 |
小于等于 (<= ) |
左邊的操作數(shù)小于或等于右邊的操作數(shù)返回true夷陋。 | var1 <= var2 | var2 <= 5 |
算術(shù)運算符
算術(shù)運算符使用數(shù)值作為操作數(shù)并返回一個數(shù)值欠拾,標準的算術(shù)運算符就是加減乘除(+ - * /
)胰锌。當操作數(shù)是浮點數(shù)時,這些運算符表現(xiàn)得跟它們在大多數(shù)編程語言中一樣藐窄,例如:
console.log(1 / 2); /* prints 0.5 */
console.log(1 / 2 == 1.0 / 2.0); /* also this is true */
另外资昧,JavaScript 還提供了如下的算術(shù)運算符:
求余(%
)
二元運算符,返回相除之后的余數(shù)荆忍。
如:13 % 5 返回 3
自增(++
)
一元運算符格带,將操作數(shù)的值加一。
如果放在操作數(shù)前面 (++x)刹枉,則返回加一后的值叽唱;如果放在操作數(shù)后面 (x++),則返回操作數(shù)原值,然后再將操作數(shù)加一微宝。
var x=3;
console.log(++x); //4
console.log(x); //4
var y=3;
console.log(y++); //3
console.log(y); //4
自減(--
)
一元運算符棺亭,將操作數(shù)的值減一。前后綴兩種用法的返回值類似自增運算符蟋软。
var x=3;
console.log(--x); //輸出2
var y=3;
console.log(y--);//輸出3
一元負值符(-
)
一元運算符镶摘,返回操作數(shù)的負值。
var x=3;
console.log(-x); //輸出-3
位運算符
位運算符有七種岳守,了解即可凄敢,具體用法不作解釋:
- 按位與:
a & b
- 按位或:
a | b
- 按位異或:
a ^ b
- 按位反:
~a
- 左移:
a << b
- 右移:
a >> b
- 無符號右移:
a >>> b
邏輯運算符
邏輯運算符常用于布爾(邏輯)值之間;當操作數(shù)都是布爾值時湿痢,返回值也是布爾值贡未。 不過實際上&&
和||
返回的是一個特定的操作數(shù)的值,所以當它用于非布爾值的時候蒙袍,返回值就可能是非布爾值。 邏輯運算符的描述如下嫩挤。
邏輯與(&&
)
對于expr1 && expr2
害幅,如果 expr1 能被轉(zhuǎn)換為 false,那么返回 expr1岂昭;否則以现,返回 expr2 。因此约啊,&&
用于布爾值時邑遏,當操作數(shù)都為 true 時返回 true;否則返回 false恰矩。
var a1 = true && true; // t && t returns true
var a2 = true && false; // t && f returns false
var a3 = false && true; // f && t returns false
var a4 = false && (3 == 4); // f && f returns false
var a5 = "Cat" && "Dog"; // t && t returns Dog
var a6 = false && "Cat"; // f && t returns false
var a7 = "Cat" && false; // t && f returns false
邏輯或(||
)
對于expr1 || expr2
记盒,如果 expr1 能被轉(zhuǎn)換為 true,那么返回 expr1外傅;否則纪吮,返回 expr2 俩檬。因此,||
用于布爾值時碾盟,當任何一個操作數(shù)為 true 則返回 true棚辽;如果操作數(shù)都是 false 則返回 false。
var o1 = true || true; // t || t returns true
var o2 = false || true; // f || t returns true
var o3 = true || false; // t || f returns true
var o4 = false || (3 == 4); // f || f returns false
var o5 = "Cat" || "Dog"; // t || t returns Cat
var o6 = false || "Cat"; // f || t returns Cat
var o7 = "Cat" || false; // t || f returns Cat
邏輯非(~
)
如果操作數(shù)能夠轉(zhuǎn)換為 true 則返回 false冰肴;否則返回 true屈藐。
var n1 = !true; // !t returns false
var n2 = !false; // !f returns true
var n3 = !"Cat"; // !t returns false
條件運算符
條件運算符是 JavaScript 中唯一需要三個操作數(shù)的運算符。運算的結(jié)果根據(jù)給定條件在兩個值中取其一熙尉。語法為:
condition ? val1 : val2
如果 condition 為 true联逻,則結(jié)果取 val1。否則為 val2骡尽。你能夠在任何允許使用標準運算符的地方使用條件運算符遣妥。
例如,
var status = (age >= 18) ? "adult" : "minor";
當 age 大于等于18的時候攀细,語句將 “adult” 賦值給 status箫踩;否則將 “minor” 賦值給 status 。
運算符的優(yōu)先級
運算符的優(yōu)先級確定計算表達式時谭贪,他們的應用順序境钟。您可以通過使用括號改寫運算符優(yōu)先級。下表描述符的優(yōu)先級俭识,從最高到最低:
Operator type | Individual operators | ||
---|---|---|---|
member | . [] |
||
call / create instance | () new |
||
negation/increment | ! ~ - + ++ -- typeof void delete |
||
multiply/divide | * / % |
||
addition/subtraction | + - |
||
bitwise shift | << >> >>> |
||
relational | < <= > >= in instanceof |
||
equality | == != === !== |
||
bitwise-and | & |
||
bitwise-xor | ^ |
||
bitwise-or | ` | ` | |
logical-and | && |
||
logical-or | ` | ` | |
conditional | ?: |
||
assignment | `= += -= *= /= %= <<= >>= >>>= &= ^= | =` | |
comma | , |
上表不需要死記硬背慨削,遇到無法判斷優(yōu)先級的情況下使用括號即可。
表達式(Expressions)
表達式是代碼的任何有效的單元解析為一個值套媚。從概念上講缚态,有兩種類型的表達式:
- 將值分配給一個變量:如表達式 x=7。
- 僅僅有一個值:如代碼 3 + 4堤瘤。
原文:《表達式和運算符》(From 《Before Coding》)