一元運算符與二元運算符

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'

一元加法(+)html

一元加法運算符把操做數轉換爲數字(或者NaN),並返回這個轉換後的數字。若是操做數自己就是數字,則直接返回這個數字。java

+1    // => 1: 操做數自己就是數字,則直接返回這個數字
+'1'  // => 1: 把字符串轉換爲數字
+'-1' // => -1: 把字符串轉換爲數字

一元減法(-)學習

當「-」用作一元運算符時,它會根據須要把操做數轉換爲數字,而後改變運算結果的符號。spa

-1   // => -1: 操做數自己就是數字,直接改變運算結果的符號
-'1' // => -1: 把字符串轉換爲數字,再改變運算結果的符號
-'-1'// => 1: 把字符串轉換爲數字,再改變運算結果的符號

二元加法(+)code

二元加法運算符「+」能夠對兩個數字作加法,也能夠作字符串鏈接操做。htm

當兩個操做數都是數字或都是字符串的時候,計算結果是顯而易見的。然而對於其餘狀況來講,則要進行一些必要的類型轉換,而且運算符的行爲依賴於類型轉換的結果。加號的轉換規則優先考慮字符串鏈接,若是其中一個操做數是字符串或者轉換爲字符串的對象,另一個操做數將會轉換爲字符串,加法將進行字符串的鏈接操做。若是兩個操做數都不是類字符串(string-like)的, 兩個操做數都將轉換爲數字(或者NaN),而後進行算術加法運算。對象

這裏有一些栗子:blog

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後作加法

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

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

相關文章
相關標籤/搜索