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

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

概述

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

運算符(Operators)

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

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

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 會嘗試轉(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》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末玫芦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子本辐,更是在濱河造成了極大的恐慌桥帆,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慎皱,死亡現(xiàn)場離奇詭異老虫,居然都是意外死亡,警方通過查閱死者的電腦和手機茫多,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門祈匙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人地梨,你說我怎么就攤上這事菊卷〉蘅遥” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵洁闰,是天一觀的道長歉甚。 經(jīng)常有香客問我,道長扑眉,這世上最難降的妖魔是什么纸泄? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮腰素,結(jié)果婚禮上聘裁,老公的妹妹穿的比我還像新娘。我一直安慰自己弓千,他們只是感情好衡便,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洋访,像睡著了一般镣陕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上姻政,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天呆抑,我揣著相機與錄音,去河邊找鬼汁展。 笑死鹊碍,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的食绿。 我是一名探鬼主播侈咕,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼器紧!你這毒婦竟也來了乎完?” 一聲冷哼從身側(cè)響起囤攀,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤背伴,失蹤者是張志新(化名)和其女友劉穎肯夏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桥状,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年硝清,在試婚紗的時候發(fā)現(xiàn)自己被綠了辅斟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡芦拿,死狀恐怖士飒,靈堂內(nèi)的尸體忽然破棺而出查邢,到底是詐尸還是另有隱情,我是刑警寧澤酵幕,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布扰藕,位于F島的核電站,受9級特大地震影響芳撒,放射性物質(zhì)發(fā)生泄漏邓深。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一笔刹、第九天 我趴在偏房一處隱蔽的房頂上張望芥备。 院中可真熱鬧,春花似錦舌菜、人聲如沸萌壳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袱瓮。三九已至,卻和暖如春山孔,著一層夾襖步出監(jiān)牢的瞬間懂讯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工台颠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留褐望,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓串前,卻偏偏與公主長得像瘫里,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子荡碾,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

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