摘要:跳過第二個運算子的機制,被稱為短路有些程序員喜歡用它取代結構等價于運算符可以多個連用返回第一個布爾值為的表達式的值。
一、運算符概述 1、定義
JavaScript中運算符主要用于連接簡單表達式,組成一個復雜的表達式
2、運算符類別算數運算符
賦值表達式
比較表達式
布爾運算符
位運算符
二、算數運算符 1、加法運算符(Addition):x + y加法運算符是在運行時決定,到底是執行相加,還是執行連接。也就是說,運算子的不同,導致了不同的語法行為,這種現象稱為“重載”(overload)
(1)、在兩個操作數都是數字的時候,會做加法運算
console.log(2+4);//6
(2)、兩個參數都是字符串或在有一個參數是字符串的情況下,會把另外一個參數轉換為字符串做字符串拼接
console.log("2"+"4");//"24"
"3" + 4 + 5 // "345" 3 + 4 + "5" // "75"
(3)、在參數有對象的情況下
3.1首先自動調用對象的valueOf方法
一般來說,對象的valueOf方法總是返回對象自身,,也可自定義
3.2再自動調用對象的toString方法,將其轉為字符串(如果valueOf方法直接返回一個原始類型的值,就不會調用tostring)
對象的toString方法默認返回[object Object],也可自定義
var obj = { p: 1 }; obj + 2 // "[object Object]2"
3.3自定義valueOf方法或toString方法,得到想要的結果
var obj = { valueOf: function () { return 1; } }; obj + 2 // 3
var obj = { toString: function () { return "hello"; } }; obj + 2 // "hello2"
3.4 Date對象特例
如果運算子是一個Date對象的實例,那么會優先執行toString方法。
var obj = new Date(); obj.valueOf = function () { return 1 }; obj.toString = function () { return "hello" }; obj + 2 // "hello2"
(4)、在只有一個字符串參數和+號的時候會嘗試將其轉換為數字,轉換失敗輸出NaN
console.log(+"4");//4
+"ffffdffffd" NaN2、其他算術運算符
對于其他運算符,在運算前都強制轉換數字,再運算。對象就調用valueOf或者toString,如果不能轉換的,輸出NaN
減法運算符(Subtraction): x - y
乘法運算符(Multiplication): x * y
除法運算符(Division):x / y
余數運算符(Remainder):x % y
自增運算符(Increment):++x(先加后賦值) 或者 x++(先賦值后加)
自減運算符(Decrement):--x 或者 x--
求負運算符(Negate):-x
數值運算符(Convert to number): +x
賦值運算符用于給變量賦值,最常見的賦值運算符,當然就是等號,表達式x=y表示將y賦值給x。除此之外,JavaScript還提供其他11個賦值運算符。
運算時從右到左,如var z=y=x;
x += y // 等同于 x = x + y x -= y // 等同于 x = x - y x *= y // 等同于 x = x * y x /= y // 等同于 x = x / y x %= y // 等同于 x = x % y x >>= y // 等同于 x = x >> y x <<= y // 等同于 x = x << y x >>>= y // 等同于 x = x >>> y x &= y // 等同于 x = x & y x |= y // 等同于 x = x | y x ^= y // 等同于 x = x ^ y四、比較運算符
比較運算符比較兩個值,然后返回一個布爾值,表示是否滿足比較條件。
JavaScript提供了8個比較運算符。
1、 == 比較兩個值是否相等
相等運算符(==)會將它們轉換成同一個類型,再用嚴格相等運算符進行比較。
2、=== 嚴格相等,比較它們是否為同一個值(數據類型也要相同)
內容較多,多帶帶寫了一篇文章去說相等和嚴格相等
3、!=不相等
4、!== 嚴格不相等
它的算法就是先求嚴格相等運算符的結果,然后返回相反值。
5、其他比較運算符(< 小于 <= 小于或等于 > 大于 >= 大于或等于)
5.1同為字符串按照Unicode 順序進行比較
首先比較首字符的 Unicode 碼點,如果相等,再比較第二個字符的 Unicode 碼點,以此類推
5.2不全為字符串的比較,分成以下兩種情況
1)原始類型值(數值、字符串、布爾值)
如果兩個運算子都是原始類型的值,則是先轉成數值再比較
5 > "4" // true // 等同于 5 > Number("4") // 即 5 > 4 true > false // true // 等同于 Number(true) > Number(false) // 即 1 > 0 2 > true // true // 等同于 2 > Number(true) // 即 2 > 1
2)有一方或者雙方為對象的比較
調用valueOf方法和toString方法,轉為原始類型的值,再進行比較
var x = [2]; x > "11" // true // 等同于 [2].valueOf().toString() > "11" // 即 "2" > "11"
{ x: 2 } >= { x: 1 } // true // 等同于 { x: 2 }.valueOf().toString() >= { x: 1 }.valueOf().toString() // 即 "[object Object]" >= "[object Object]"五、布爾運算符 1、! 取反運算符
對數據取反,得到的都是布爾值!
2、&& 且運算符1)用途:且運算符(&&)往往用于多個表達式的求值。
2) 運算規則是:如果第一個運算子的布爾值為true,則返回第二個運算子的值(注意是值,不是布爾值);如果第一個運算子的布爾值為false,則直接返回第一個運算子的值,且不再對第二個運算子求值。
var x = 1; (1 - 1) && ( x += 1) // 0 x // 1
3)跳過第二個運算子的機制,被稱為“短路”,有些程序員喜歡用它取代if結構
if (i) { doSomething(); } // 等價于 i && doSomething();
4)運算符可以多個連用
返回第一個布爾值為false的表達式的值。如果所有表達式的布爾值都為true,則返回最后一個表達式的值。
true && "foo" && "" && 4 && "foo" && true // "" 1 && 2 && 3 // 33、|| 或運算符
1)運算規則:
如果第一個運算子的布爾值為true,則返回第一個運算子的值,且不再對第二個運算子求值;如果第一個運算子的布爾值為false,則返回第二個運算子的值
"t" || "f" // "t" "" || "f" // "f"
2)或運算符可以多個連用
這時返回第一個布爾值為true的表達式的值。如果所有表達式都為false,則返回最后一個表達式的值。
false || 0 || "" || 4 || "foo" || true // 4 false || 0 || "" // ""4、condition? true case : false case 三元條件運算符
1)簡介:三元條件運算符由問號(?)和冒號(:)組成,分隔三個表達式。
2)規則:如果第一個表達式的布爾值為true,則返回第二個表達式的值,否則返回第三個表達式的值。
console.log(true ? "T" : "F");六、位運算符
就是把兩個做位運算的值,都按照二進制一位一位的按照符號規則進行運算
位運算符只對整數起作用,如果一個運算子不是整數,會自動轉為整數后再執行
1、或運算(or):
符號為|,表示兩個二進制位中有一個為1,則結果為1,否則為0。
0000 0010 | 0000 0001 就等0000 0011(3)
2、與運算(and):
符號為&,表示兩個二進制位都為1,則結果為1,否則為0。
0000 0010 & 0000 0001 就等0000 0000(0)
3、否運算(not):
符號為~,表示將一個二進制位變成相反值。
~ 0000 0010 就等于1111 1101
4、異或運算(xor):
符號為?,表示兩個二進制位中有且僅有一個為1時,結果為1,否則為0。
5、左移運算(left shift):符號為<<
1(數值)<<1(左移的位數) //2 1<<2 //4 1<<3 //8
6、右移運算(right shift):符號為>>
8>>1 //4
7、帶符號位的右移運算(zero filled right shift):符號為>>>
七、其他運算符 1、()小括號圓括號是一種運算符,它有兩種用法:
1)如果把表達式放在圓括號之中,作用是求值
2)如果跟在函數的后面,作用是調用函數。
逗號運算符用于對兩個表達式求值,并返回后一個表達式的值。
var x = 0; var y = (x++, 10); x // 1 y // 10八、運算符的優先級
運算符的優先級,建議還是查看mdn。全部記住很難,簡單理一下順序,加深直覺(不準確喲)
自增 > 邏輯非>typeof > 加減乘除 > 判斷大小(><=) >邏輯運算(與或)>三元條件運算符 >賦值 >,)
1、typeof的優先級相當的高,比加減乘除神馬的都高,所以雖然是操作符,在在復雜表達式的時候我們還是習慣加括號,看個例子
typeof 2*3;//NaN typeof (2*3);//"number" typeof 2+3;// "number3"
2、 ++、--是右結合的操作符(優先級最高的幾個都是右結合),而且比加減乘除優先級高。同時自增、自減運算符的運算數得是左值(可以放在賦值符號左邊的值),而不能是常數
var a=0,b=0; a+++b;//0 a;//1,a++優先級比++b高,所以相當于(a++)+b b;//0
3、賦值運算符的優先級相當的低
a = b == c; //等同于a = (b==c)
4、邏輯非!也在優先級隊列的前端,比加減乘除高,但邏輯與、邏輯或優先級很低,不如加減乘除
!2*0; //0, 等價于(!2)*0
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108649.html
摘要:對于與的設計在中所設計的純對象類型的與方法,它們的返回如下方法返回值對象本身。與三個強制轉換函數,所對應的就是在標準中的三個內部運算轉換的對照表。 在JS中的運算符共同的情況中,(+)符號是很常見的一種,它有以下的使用情況: 數字的加法運算,二元運算 字符串的連接運算,二元運算,最高優先 正號,一元運算,可延伸為強制轉換其他類型的運算元為數字類型 當然,如果考慮多個符號一起使用時,...
摘要:在設計時,有兩種比較運算符第一種是比較,它會自動轉換數據類型再比較,很多時候,會得到非常詭異的結果第二種是比較,它不會自動轉換數據類型,如果數據類型不一致,返回,如果一致,再比較。 數據類型和變量 數據類型計算機顧名思義就是可以做數學計算的機器,因此,計算機程序理所當然地可以處理各種數值。但是,計算機能處理的遠不止數值,還可以處理文本、圖形、音頻、視頻、網頁等各種各樣的數據,不同的數據...
摘要:在中的關系比較運算,指的是像這種大小值的關系比較。而相等比較,可區分為標準相等比較與嚴格相等比較兩大種類。 在JS中的關系比較(Relational Comparison)運算,指的是像x < y這種大小值的關系比較。 而相等比較,可區分為標準相等(standard equality)比較x == y與嚴格相等(strict equality)比較x === y兩大種類。嚴格相等比較會...
摘要:中的基本數據類型有種,引用數據類型則是指除了上述基本數據類型以外的所有值,比如隱式類型轉換加法的隱式轉換轉換為原始值當需要轉換為原始值時,引擎內部會進行抽象操作。 showImg(https://segmentfault.com/img/bVbqjVM); 基本運算規則 +的使用有兩種情況 當+連接兩個變量或值時即為二元運算符,比如a + b,當+在變量或值前面時,則為一元運算符,比...
摘要:介紹編程數據結構,算法,內存分配表單驗證需要一門語言可以直接運行在瀏覽器中,來完成表單驗證的功能。 Javascript介紹編程(數據結構,算法,內存分配)表單驗證 需要一門語言可以直接運行在瀏覽器中,來完成表單驗證的功能。 瀏覽器廠商 網景 firefox js 標準 js解釋器 IE js js解釋器 google js j...
閱讀 2021·2019-08-30 15:52
閱讀 2975·2019-08-29 16:09
閱讀 1323·2019-08-28 18:30
閱讀 2453·2019-08-26 12:24
閱讀 1089·2019-08-26 12:12
閱讀 2273·2019-08-26 10:45
閱讀 565·2019-08-23 17:52
閱讀 810·2019-08-23 16:03