js運算符(運算符的結合性)

 一、javascript具備下列種類的運算符:算術運算符;邏輯運算符;比較運算符;

二、目的分類:字符串運算符;邏輯運算符;逐位運算符;賦值運算符;

三、特殊運算符:條件運算符;typeof運算符;建立對象運算符new;delete運算符;void運算符號;逗號運算符;

算術運算符:+ 、 - 、* 、 / 、 % 、 -(一元取反) 、 ++ 、 --

等同運算符與全同運算符:==(等於) 、 ===(恆等於)、 !=(不等於) 、 !==(不恆等於)

比較運算符:< 、 > 、 <= 、 >=

字符串運算符: +

邏輯運算符:&& 、 ||、 !、

賦值運算符:=、 +=、 *=、 -=、 /=

規則:

1、必定要注意傳遞給運算符的數據類型和返回的數據類型!不一樣的運算符都指望它的運算數表達式計算出的結果符合某種數據類型。

例如:對字符串是不能進行乘法運算的,"a" * "b" 是不合法的,可是,在可能的狀況下,javascript會把表達式轉換成正確的類型,所以,表達式 "3" * "5" 是合法的,javascript將字符串轉換成數字執行運算,結果返回的是數字15,而不是字符串"15"。

2、+ 根據運算數的不一樣,具備不一樣的表現: (~~~ +運算符偏心字符串,只要有操做數是字符串(包括數值字符串),都會進行字符串鏈接操做)

字符串 + 字符串 = 字符串(被鏈接);"a" + "b" = "ab" "5" + "6" = "56"

字符串 + 數字 = (字符串轉換成數字)字符串(被鏈接);"a" + 5 = "a5" 5被轉換成字符串 "1" + 0 = "10"

數字 + 數字 = 數字(相加)5 + 5 = 10。

3、注意運算符的結合性,有些運算符從左到右的結合性;有些從右到左結合性。

例如:w = a + b + c 等同於 w = (a + b) + c;

w = ---b 等同於 w = - ( - ( -b ) ); w = a = b = c 等同於 w= ( a = ( b = c ))

一元運算符、賦值運算符、三元運算符的結合性是從右到左的;

4、算術運算符規則:

「+」:能夠進行「加法」與「鏈接」運算;若是2個運算符中的一個是字符串,javascript就將另外一個轉換成字符串,而後將2個運算數鏈接起來。

「+」:若是一個運算數是對象,javascript就會將對象轉換成數字作加法運算或者字符串作鏈接運算;

「-」「*」「/」 若是2個運算數中的一個是是非數字,則將它轉化成數字執行數學運算。

「/」 在javascript中,因爲全部的數都是浮點數,除法的結果都是浮點數,5 / 2 = 2.5 ;除數爲0的結果爲正負無窮;0/0爲NaN;

「%」模運算符:計算第一個運算數對第二個運算數的模,就是第一個運算數被第二個運算數除時,返回餘數。若是運算數是非數字的,則轉換成數字。

「-」一元取反:將運算數取反,若是運算數不是數字,則轉化成數字。

「++」「--」增量運算符/減量運算符號:運算數必須是一個變量、樹組的一個元素或對象的一個屬性。若是運算數不是數字,則轉換成數字。

注意:若是「++」位於運算數以前,先對運算數進行增量,而後計算運算數增加後的值。

若是「--」位於運算數以後,先計算運算數未增加以前的值,而後對運算數增量。

例如:i = 1; //賦值給i值1

j = ++i; //先將i增量爲2,而後將2賦值給j,i的值是2,j的值也是2。

i = 1; //賦值給i值1

j = i++; //先將i賦值給j,而後對將i值增量到2,i的值是2,j的值是1。

減量運算符「--」與「++」相同。

5、等同運算符與全同運算符:

(一)「==」「!==」等同運算符與非等同運算符:

比較2個運算數,返回一個不布爾值。

比較數值、字符串、布爾值使用的都是量值。當且僅當兩個變量存放的值相等的時候,他們才相等。

比較對象、數組、函數的時候,使用的是引用,只有2個變量引用的是同一個對象時,他們纔是相等的

兩個不一樣的數組是徹底不一樣的,即便他們具備徹底相同的元素。對於存放對象、數組、函數的引用的變量來講,只有當他們引用的是同一個對象、數組、函數的時候,他們才相等。

注意!應遵循的原則:

當兩個運算數的類型不一樣時:將他們轉換成相同的類型,

1)一個數字與一個字符串,字符串轉換成數字以後,進行比較。

2)true轉換爲一、false轉換爲0,進行比較。

3)一個對象、數組、函數 與 一個數字或字符串,對象、數組、函數轉換爲原始類型的值,而後進行比較。(先使用valueOf,若是不行就使用toString)

4)其餘類型的組合不星等。

想兩個運算數類型相同,或轉換成相同類型後:

1)2個字符串:同一位置上的字符相等,2個字符串就相同。

2)2個數字:2個數字相同,就相同。若是一個是NaN,或兩個都是NaN,則不相同。

3)2個都是true,或者2個都是false,則想同。

4)2個引用的是同一個對象、函數、數組,則他們相等,若是引用的不是同一個對象、函數、數組,則不相同,即便這2個對象、函數、數組能夠轉換成徹底相等的原始值。

5)2個null,或者2個都是未定義的,那麼他們相等。

「!=」非等同運算符:與等同運算符檢測的結果相反。

(二)「===」「!===」全同運算符與非全同運算符號:

全同運算符遵循等同運算符的比較規則,可是它不對運算數進行類型轉換,當兩個運算數的類型不一樣時,返回false;只有當兩個運算數的類型相同的時候,才遵循等同運算符的比較規則進行比較。

「!==」非全同運算符與全同運算符比較的結果相反。若是兩個運算數的類型或者值不一樣的時候,返回true。

6、比較運算符:

這些比較運算符用於比較不一樣類型的值,結果返回一個布爾值。

「<」「>」「<=」「>=」

注意規則:比較的運算數能夠是任意類型的,可是隻能在數字和運算數上執行。不是數字和字符串的運算數將被轉換成數字或字符串。

1)若是兩個運算數都是數字,或者均可以轉換成數字,則按照數字的大小進行比較;

2)若是兩個運算數都是字符串,或者均可以轉換成字符串,則將按照字母順序進行比較;

3)若是字符串遇到數字,則將字符串轉換成數字進行比較。

4)若是運算數既不能轉換成數字,也不能轉換成字符串,則返回結果false。

7、字符串運算符:

並無專用的字符串運算符,只是有些運算符在遇到字符串運算數的時候,表現不一樣。

(一)「+」鏈接2個字符串;

1)當2個運算數都是字符串的時候,鏈接起來;

2)當其中有一個是數字的時候,將數字轉換成字符串,鏈接起來;

(二)「>」這樣的比較運算符經過比較確認兩個字符串的順序,比較採用字符的順序,較小的位於教大的前面,大寫字母位於小寫字母以前。

(三)「+」的做用方法取決於計算順序,

如:s = 1 + 2 +"var" 則:返回結果3var; 由於先計算1+2,而後將結果3轉換成字符串與"var"鏈接;

如:s = "var" + 1 + 2 則:返回結果var12; 由於先計算var與1的鏈接,在將結果var1與轉換成字符串的2鏈接起來。

8、邏輯運算符:

用於執行布爾運算,經常和比較運算符一塊兒使用,來表示複雜的比較運算。

「&&」 邏輯與運算、「||」邏輯或運算符、「!」邏輯非運算符

(一)「&&」當兩個運算數都是布爾值的時候,邏輯與對他們進行and操做,即:當且僅當兩個布爾值都是true的時候,返回結果true,不然返回false。

注意:實際表現

「&&」將檢測第一個表達式運算數布爾值,若是第一個運算數表達式返回false,則返回左邊第一個運算數表達式的值:false;不然將繼續檢測第二個即右邊的運算數表達式,而後返回第二個運算數表達式的值;

例如:if (a = b) stop(); 與 (a = b) && stop(); 等價

不同意使用這個方法,由於運算符右邊的代碼不能保證會被執行,

例如:if ((a < b) && (b++ <10) ) stop();若是運算符右邊的增量必須的話,卻有可能因爲前面的返回值而不被執行,通常反對在&&的右邊使用具備其餘做用的表達式(賦值、函數調用、增減量);

將「&&」看做是一個布爾代數的運算符,會更簡單與安全。

(二)「||」當兩個運算數都是布爾值的時候,邏輯或對他們進行or操做,即:當兩個布爾值有一個是true的時候,返回結果true,不然返回false。

注意:實際表現

「||」將檢測第一個表達式運算數布爾值,若是第一個運算數表達式返回true,則返回左邊第一個運算數表達式的值:true;不然將繼續檢測第二個即右邊的運算數表達式,而後返回第二個運算數表達式的值;

一樣不同意使用這個方法,由於運算符右邊的代碼不能保證會被執行,

通常反對在||的右邊使用具備其餘做用的表達式(賦值、函數調用、增減量);

將「||」看做是一個布爾代數的運算符,會更簡單與安全。

(三)「!」邏輯非是一個一元運算符,放在運算數以前,它的目的是對運算數取反。

9、賦值運算符:

(一)「=」是賦值運算符;他老是指望左邊的運算數是一個變量、數組的一個元素或對象的一個屬性;

指望右邊是一個任意類型的任意的值;

從右到左的結合性,若是一個表達式中有多個賦值運算符,則從最右邊開始計算。

注意:每個賦值表達式都有一個值,就是運算符右邊的值;

(二)可使用帶操做的賦值運算

「+=」 左邊的值加上右邊的值後,賦值於左邊的值。「-=」「/=」「*=」方法同樣;

10、其餘運算符:

「?:」條件運算符是惟一的一個三元運算符;

一個表達式的布爾結果?表達式1(任意類型的任意值):表達式2(任意類型的任意值);

根據第一個運算數的布爾值結果,若是爲true,則執行第二個運算數表達式,返回第二個運算數表達式的值;若是第一個運算數的布爾值結果是false,則執行第三個運算數表達式,返回第三個運算數表達式的值。javascript

相關文章
相關標籤/搜索