Before Coding [13] - js的表達式和運算符

必備知識:前面課程的學習

概述

本章主要介紹 JavaScript 的表達式和運算符,包括了賦值,比較,算數(shù),按位,邏輯,字符串,三元等等。列舉所有的運算符,但是不會全部講解,只講解實際編程中會用到的幾種。

運算符(Operators)

JavaScript 擁有如下類型的運算符:

  • 賦值運算符
  • 比較運算符
  • 算數(shù)運算符
  • 按位運算符
  • 邏輯運算符
  • 字符串運算符
  • 條件 (三元) 運算符
  • 逗號運算符
  • 一元運算符
  • 關系運算符

JavaScript 擁有二元和一元運算符, 和一個特殊的三元運算符(條件運算符)。

一個二元運算符需要兩個操作數(shù),分別在運算符的前面和后面:

操作數(shù)1   運算符   操作數(shù)2
operand1 operator operand2

例如, 3+4xy*。

一個一元運算符需要一個在運算符前面或后面的操作數(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 會嘗試轉換它們?yōu)榍‘數(shù)念愋蛠肀容^。這種行為通常發(fā)生在數(shù)字作為操作數(shù)的比較。類型轉換的例外是使用 ===!== 操作符,它們會執(zhí)行嚴格的平等和非平等比較。這些運算符不會在檢查想等之前轉換操作數(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ù)時,這些運算符表現(xiàn)得跟它們在大多數(shù)編程語言中一樣,例如:

console.log(1 / 2); /* prints 0.5 */
console.log(1 / 2 == 1.0 / 2.0); /* also this is true */

另外,JavaScript 還提供了如下的算術運算符:

求余(%

二元運算符,返回相除之后的余數(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 能被轉換為 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 能被轉換為 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ù)能夠轉換為 true 則返回 false;否則返回 true。

var n1 = !true;  // !t returns false
var n2 = !false; // !f returns true
var n3 = !"Cat"; // !t returns false

條件運算符

條件運算符是 JavaScript 中唯一需要三個操作數(shù)的運算符。運算的結果根據(jù)給定條件在兩個值中取其一。語法為:

condition ? val1 : val2

如果 condition 為 true,則結果取 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》

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容