表達式和運算符

來自專欄前端博客

運算符

JavaScript中運算符主要用於連接簡單表達式,組成一個複雜的表達式。常見的有算數表達式、比較表達式、邏輯表達式、賦值表達式等,也有單目運算符,指操作原始表達式。大多數運算符都由標點符號組成(+、>=、!),也有關鍵字表示的運算符,如typeof、delete、instanceof等。

一些運算符可以作用於任何數據類型(typeof),但大部分操作符希望操作數是特定的類型,而且大部分操作符會計算出(我們也常說返回)一個特定類型的值(typeof返回的全是string)。在JavaScript中運算符通常會根據需要對操作數進行類型轉換,乘法操作符希望操作數是數字,但是 "3" * "5"也是合法的,JavaScript會自動將其轉換為數字計算,返回Number 15。

有些操作符對不同的數據類型有不同的含義,比如 +

在兩個操作數都是數字的時候,會做加法運算兩個參數都是字元串或在有一個參數是字元串的情況下會把另外一個參數轉換為字元串做字元串拼接在參數有對象的情況下會調用其valueOf或toString在只有一個字元串參數的時候會嘗試將其轉換為數字在只有一個數字參數的時候返回其正數值console.log(2+4);//6console.log("2"+"4");//"24"console.log(2+"4");//"24"console.log(2+new Date());//"2Mon Jan 20 2014 17:15:01 GMT+0800 (China Standard Time)"console.log(+"4");//4

運算符類型

算數運算符

加法運算符(Addition):x + y減法運算符(Subtraction): x - y乘法運算符(Multiplication): x * y除法運算符(Division):x / y餘數運算符(Remainder):x % y自增運算符(Increment):++x 或者 x++自減運算符(Decrement):--x 或者 x--求負運算符(Negate):-x數值運算符(Convert to number): +x

賦值運算符

比較運算符

比較運算符比較它的操作數並返回一個基於表達式是否為真的邏輯值。操作數可以是數字,字元串,邏輯,對象值。字元串比較是基於標準的字典順序,使用Unicode值。在多數情況下,如果兩個操作數不是相同的類型, JavaScript 會嘗試轉換它們為恰當的類型來比較。這種行為通常發生在數字作為操作數的比較。類型轉換的例外是使用 === 和 !== 操作符,它們會執行嚴格的相等和不相等比較。這些運算符不會在檢查相等之前轉換操作數的類型

==和===的區別

==和===的區別

邏輯運算符

邏輯運算符常用於布爾(邏輯)值之間; 當操作數都是布爾值時,返回值也是布爾值。 不過實際上&&和||返回的是一個特定的操作數的值,所以當它用於非布爾值的時候,返回值就可能是非布爾值。 邏輯運算符的描述如下

布爾運算符

! 取反運算符&& 且運算符|| 或運算符condition? true case : false case 三元條件運算符

位運算符

或運算(or):符號為|,表示兩個二進位位中有一個為1,則結果為1,否則為0。與運算(and):符號為&,表示兩個二進位位都為1,則結果為1,否則為0。否運算(not):符號為~,表示將一個二進位位變成相反值。異或運算(xor):符號為?,表示兩個二進位位中有且僅有一個為1時,結果為1,否則為0。左移運算(left shift):符號為<<右移運算(right shift):符號為>>帶符號位的右移運算(zero filled right shift):符號為>>>

其它

小括弧

在JavaScript中,圓括弧是一種運算符,它有兩種用法:如果把表達式放在圓括弧之中,作用是求值;如果跟在函數的後面,作用是調用函數。把表達式放在圓括弧之中,將返回表達式的值。

void

void運算符的作用是執行一個表達式,然後返回undefined。

逗號運算符

逗號運算符用於對兩個表達式求值,並返回後一個表達式的值。

運算符優先順序與結合性

運算符優先順序與結合性

類型轉換

if的判斷

// 題目1:如下代碼輸出什麼?if ("hello") { console.log("hello")}// 題目2:如下代碼輸出什麼?if ("") { console.log(empty)}// 題目3:如下代碼輸出什麼?if (" ") { console.log(blank)}


// 題目4:如下代碼輸出什麼?if ([0]) { console.log(array)}if(0.00){ console.log(0.00)}


一句話:對於括弧裏的表達式,會被強制轉換為布爾類型

== 的判斷

"" == 0 //題目1" " == 0 //題目2"" == true //題目3"" == false //題目4" " == true //題目5


!" " == true //題目6!" " == false //題目7"hello" == true //題目8"hello" == false //題目9"0" == true //題目10"0" == false //題目11"00" == false //題目12"0.00" == false //題目13


undefined == null //題目14{} == true //題目15[] == true //題目16var obj = { a: 0, valueOf: function(){return 1} } obj == "[object Object]" //題目17obj == 1 //題目18obj == true //題目19


instanceof

如果所判別的對象確實是所指定的類型,則返回true。 其語法如下:

objectName instanceof objectType

objectName 是需要做判別的對象的名稱

objectType是假定的對象的類型, 例如Date或 Array.

當你需要確認一個對象在運行時的類型時,可使用instanceof. 例如,需要 catch 異常時,你可以針對拋出異常的類型,來做不同的異常處理。

例如, 下面的代碼使用instanceof去判斷 theDay是否是一個 Date 對象. 因為theDay是一個Date對象, 所以if中的代碼會執行.

var theDay = new Date(1995, 12, 17);if (theDay instanceof Date) { // statements to execute}

參考

表達式和運算符

比較操作符

運算符優先順序

Generator推導式表達式和運算符表達式和運算符


推薦閱讀:
查看原文 >>
相關文章