JavaScript中的運算子有很多,主要分為算術運算子,等同全同運算子,比較子,字串運算子,邏輯運算子,賦值運算子等。這些運算子都有一些屬於自己的運算規則,下面就為大家介紹一下JavaScript中的運算子。
:+ 、 - 、* 、 / 、 % 、 -(一元取反) 、 ++ 、 --
:== 、 ===、 !== 、 !===
:< 、 > 、 <= 、 >=
:< 、 > 、 <= 、 >= 、 = 、 +
:&& 、 ||、 !、
:=、 +=、 *=、 -=、 /=
“+”:可以進行“加法”與“串連”運算;如果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。
遞減運算子“--”與“++”相同。
(I)“==”“!==”等同運算子與非等同運算子:
比較2個運算數,返回一個不布爾值。
比較數值、字串、布爾值使用的都是量值。若且唯若兩個變數存放的值相等的時候,他們才相等。
比較對象、數組、函數的時候,使用的是引用,只有2個變數引用的是同一個對象時,他們才是相等的。兩個不同的數組是完全不同的,即使他們具有完全相同的元素。對於存放對象、數組、函數的引用的變數來說,只有當他們引用的是同一個對象、數組、函數的時候,他們才相等。
注意!應遵循的原則:
當兩個運算數的類型不同時:將他們轉換成相同的類型,
1)一個數字與一個字串,字串轉換成數字之後,進行比較。
2)true轉換為1、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個都是未定義的,那麼他們相等。
“!=”非等同運算子:與等同運算子檢測的結果相反。
(II)“===”“!===”全同運算子與非全同運算子號:
全同運算子遵循等同運算子的比較規則,但是它不對運算數進行類型轉換,當兩個運算數的類型不同時,返回false;只有當兩個運算數的類型相同的時候,才遵循等同運算子的比較規則進行比較。
“!==”非全同運算子與全同運算子比較的結果相反。如果兩個運算數的類型或者值不同的時候,返回true。
這些比較子用於比較不同類型的值,結果返回一個布爾值。
“<”“>”“<=”“>=”
注意規則:比較的運算數可以是任意類型的,但是只能在數字和運算數上執行。不是數字和字串的運算數將被轉換成數字或字串。
1)如果兩個運算數都是數字,或者都可以轉換成數字,則按照數位大小進行比較;
2)如果兩個運算數都是字串,或者都可以轉換成字串,則將按照字母順序進行比較;
3)如果字串遇到數字,則將字串轉換成數字進行比較。
4)如果運算數既不能轉換成數字,也不能轉換成字串,則返回結果false。
並沒有專用的字串運算子,只是有些運算子在遇到字串運算數的時候,表現不同。
(I)“+”串連2個字串;
1)當2個運算數都是字串的時候,串連起來;
2)當其中有一個是數位時候,將數字轉換成字串,串連起來;
(II)“>”這樣的比較子通過比較確認兩個字串的順序,比較採用字元的順序,較小的位於教大的前面,大寫字母位於小寫字母之前。
(III)“+”的作用方法取決於計算順序,
如:s = 1 + 2 +"var" 則:返回結果3var; 因為先計算1+2,然後將結果3轉換成字串與"var"串連;
如:s = "var" + 1 + 2 則:返回結果var12; 因為先計算var與1的串連,在將結果var1與轉換成字串的2串連起來。
用於執行布爾運算,常常和比較子一起使用,來表示複雜的比較運算。
“&&” 邏輯與運算、“||”邏輯或運算子、“!”邏輯非運算子
(I)“&&”當兩個運算數都是布爾值的時候,邏輯與對他們進行and操作,即:若且唯若兩個布爾值都是true的時候,返回結果true,否則返回false。
注意:實際表現
“&&”將檢測第一個運算式運算數布爾值,如果第一個運算數運算式返回false,則返回左邊第一個運算數運算式的值:false;否則將繼續檢測第二個即右邊的運算數運算式,然後返回第二個運算數運算式的值;
例如:if (a = b) stop(); 與 (a = b) && stop(); 等價
不贊成使用這個方法,因為運算子右邊的代碼不能保證會被執行,
例如:if ((a < b) && (b++ <10) ) stop();如果運算子右邊的增量必須的話,卻有可能由於前面的返回值而不被執行,一般反對在&&的右邊使用具有其他作用的運算式(賦值、函數調用、增減量);
將“&&”看作是一個布爾代數的運算子,會更簡單與安全。
(II)“||”當兩個運算數都是布爾值的時候,邏輯或對他們進行or操作,即:當兩個布爾值有一個是true的時候,返回結果true,否則返回false。
注意:實際表現
“||”將檢測第一個運算式運算數布爾值,如果第一個運算數運算式返回true,則返回左邊第一個運算數運算式的值:true;否則將繼續檢測第二個即右邊的運算數運算式,然後返回第二個運算數運算式的值;
同樣不贊成使用這個方法,因為運算子右邊的代碼不能保證會被執行,
一般反對在||的右邊使用具有其他作用的運算式(賦值、函數調用、增減量);
將“||”看作是一個布爾代數的運算子,會更簡單與安全。
(III)“!”邏輯非是一個一元運算子,放在運算數之前,它的目的是對運算數取反。
(I)“=”是賦值運算子;他總是期望左邊的運算數是一個變數、數組的一個元素或對象的一個屬性;
期望右邊是一個任意類型的任意的值;
從右至左的結合性,如果一個運算式中有多個賦值運算子,則從最右邊開始計算。
注意:每一個賦值運算式都有一個值,就是運算子右邊的值;
(II)可以使用帶操作的賦值運算
“+=” 左邊的值加上右邊的值後,賦值於左邊的值。“-=”“/=”“*=”方法一樣;
“?:”條件運算子是唯一的一個三元運算子;
一個運算式的布爾結果?運算式1(任意類型的任意值):運算式2(任意類型的任意值);
根據第一個運算數的布爾值結果,如果為true,則執行第二個運算數運算式,返回第二個運算數運算式的值;如果第一個運算數的布爾值結果是false,則執行第三個運算數運算式,返回第三個運算數運算式的值。
1、要注意傳遞給運算子的資料類型和返回的資料類型!不同的運算子都期望它的運算數運算式計算出的結果符合某種資料類型。
例如:對字串是不能進行乘法運算的,"a" * "b" 是不合法的,但是,在可能的情況下,javascript會把運算式轉換成正確的類型,因此,運算式 "3" * "5" 是合法的,javascript將字串轉換成數字執行運算,結果返回的是數字15,而不是字串"15"。
2、+ 根據運算數的不同,具有不同的表現:
字串 + 字串 = 字串(被串連);"a" + "b" = "ab" "5" + "6" = "11"
字串 + 數字 = (字串轉換成數字)字串(被串連);"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 ))
一元運算子、賦值運算子、三元運算子的結合性是從右至左的;
JavaScript的運算子就為大家介紹到這裡了,希望能對大家在日常中有所協助。