一元運算符與二元運算符


PS:“+”和“-”既是一元運算符,也是二元運算符。

首先我們看看下面這幾道題的結果是什么:


當 x='1'時, x+1;x-1;+x;-x;++x; typeof(x+1); typeof(x-1); typeof(+x); typeof(-x); typeof(++x); 的結果分別是多少? 答案: x+1 //'11' x-1 //0 +x //1 -x //-1 ++x //2 typeof(x+1) //'string' typeof(x-1) //'number' typeof(+x) //'number' typeof(-x) //'number' typeof(++x) //'number'

一元加法(+)

一元加法運算符把操作數轉換為數字(或者NaN),並返回這個轉換后的數字。如果操作數本身就是數字,則直接返回這個數字。

+1    // => 1: 操作數本身就是數字,則直接返回這個數字
+'1'  // => 1: 把字符串轉換為數字
+'-1' // => -1: 把字符串轉換為數字

一元減法(-)

當“-”用做一元運算符時,它會根據需要把操作數轉換為數字,然后改變運算結果的符號。

-1   // => -1: 操作數本身就是數字,直接改變運算結果的符號
-'1' // => -1: 把字符串轉換為數字,再改變運算結果的符號
-'-1'// => 1: 把字符串轉換為數字,再改變運算結果的符號

二元加法(+)

二元加法運算符“+”可以對兩個數字做加法,也可以做字符串連接操作。

當兩個操作數都是數字或都是字符串的時候,計算結果是顯而易見的。然而對於其他情況來說,則要進行一些必要的類型轉換,並且運算符的行為依賴於類型轉換的結果。加號的轉換規則優先考慮字符串連接,如果其中一個操作數是字符串或者轉換為字符串的對象,另外一個操作數將會轉換為字符串,加法將進行字符串的連接操作。如果兩個操作數都不是類字符串(string-like)的, 兩個操作數都將轉換為數字(或者NaN),然后進行算術加法運算。

這里有一些栗子:

1 + 1        // => 2: 加法
'1' + '1'    // => '11': 字符串連接
'1' + 1      // => '11': 數字轉換為字符串后進行字符串連接
1 + {}       // => '1[object Object]': 對象轉換為字符串后進行字符串連接
true + true  // => 2: 布爾值轉換為數字后做加法
1 + null     // => 1: null轉換為0后做加法
1 + undefined// => NaN: undefined轉換為NaN后做加法

需要特別注意的是,當加號運算符和字符串和數字一起使用時,需要考慮加法的結合性的對運算順序的影響。也就是說,運算結果是依賴於運算符的運算順序的,比如:

1 + 1 + '1';  // => '21'
1 +(1 + '1'); // => '111'

第一行沒有圓括號,“+”運算符具有從左至右的結合性,因此兩個數字首先進行加法計算,計算結果和字符串進行連接。在第二行中,圓括號改變了運算順序:數字1和字符串連接,生成一個新字符串,然后數字1和這個新字符串再次連接,生成了最終結果。

二元減法(-)

當“-”用做二元運算符時,它會根據需要把操作數轉換為數字,然后再進行減法運算。

1-0    // => 1: 減法
'1'-0  // => 1: 字符串轉為數字后進行減法運算
'1'-'0'// => 1: 字符串轉為數字后進行減法運算

遞增(++)

需要注意的是,“++”運算符從不進行字符串連接操作,它總是會將操作數轉換為數字並增1。表達式++x並不總和x=x+1完全一樣。

var x='1';
var y=x+1; // =>'11': 字符串連接
var z=++x; //=> 2:字符串轉為數字后增1

總結:

JavaScript中的某些運算符會做隱式的類型轉換。一元運算符“+”,“-”,“++”,二元運算符“-”都會把操作數隱式的轉換為數字,二元運算符“+”比較特殊,當有操作數是字符串,它將會把另外一個操作數轉換為字符串。

x + '' // 等價於String(x)
+x     // 等價於Number(x)

 

下面是我的公眾號,歡迎大家關注,大家一起學習一起進步

 

 

參考文章鏈接:https://www.javazhiyin.com/11742.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM