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