1.運算符總結(jié)
? 一元運算符
? 算數(shù)運算符
? 位操作符
? 關(guān)系操作符
? 相等運算符
? 邏輯運算符
? 位操作符*
2.乘法運算符
3.除法運算符
// 1绩蜻、 如果是兩個正常的數(shù)字運算章办,那就按照數(shù)學的除法運算得到結(jié)果寡喝。
var t0 = 9 / 3; // 3
var n1 = -999999e4000;
var n2 =0.00000000000000000000000000000000000000000000000000000000000001;
var t = n1 / n2;
console.log(t); // => -Infinity
// n1 / n2 的結(jié)果超出了 es 的數(shù)值的表示范圍邓深,那么結(jié)果就是Infinity
// 2雹舀、 如果一個操作數(shù)是 NaN 那么結(jié)果一定是 NaN
var n3 = NaN;
var t2 = n1 / n3; // => NaN
var t3 = n3 / n2; // => NaN
// 3续膳、 如果是 Infinity 和 Infinity 進行相除結(jié)果是 NaN
console.log(Infinity / Infinity); // => NaN
// 4民逼、 0 / 0 ,0 被除吩案,如果是 0 那么結(jié)果是 NaN霍殴,如果不是 0 那么結(jié)果我就是 Infinity
console.log( 0 / 0 ); // => NaN
console.log( '9/0=' + (-9 / 0 )); // => -Infinity
// 5媒惕、 如果 Infinity 除以任何數(shù),結(jié)果都是 [-]Infinity
console.log('Infinity / 8 = ' + (Infinity / 8)); //=>Infinity
4.求余運算符
5.自增自減運算符
自增運算符来庭,用兩個連續(xù)的+號妒蔚。比如: ++i t++. 如果兩個加號在變量前面,先進行自增運算再進行表達
式運算月弛。不然肴盏,先進行表達式運算,后進行自增運算帽衙。
var i = 9;
i++; // 自增運算符菜皂, 自己增加 1
// i = i + 1;
console.log( i ); // =>10
// 自加運算符在前面的時候,先進行自加運算厉萝,再參與表達式的運算恍飘。
++i; // i = i + 1;
console.log( i ); // =>11
// var i2 = ++i + 3; // i = 11, ++i > 12 12+3=>15
// console.log(i2)
var i2 = (i++) + 3; // i = 11, i + 3 > 14 ,最后在讓 i= i+1;
console.log(i2); // => 14
var t = 11;
t--;
// t = t -1; // 自減運算符 ,自己減 1
console.log(t)
自減同自加冀泻,不再贅述常侣。
6.加法運算符
加法的二義性:
加法運算分為: 字符串連接運算和算數(shù)加法運算。當運算的變量中有字符串的時候優(yōu)先字符串連接弹渔,
后考慮算法運算胳施。
var a = 1 + 2; // a =>3 算數(shù)運算加法
var a = "我是" + "老馬"; // a = "我是老馬" 字符串連接
一元加法運算:
當操作數(shù)只有一個的時候,+法運算符肢专,就是把操作數(shù)使用 Number 函數(shù)進行轉(zhuǎn)成數(shù)值類型舞肆。
比如:
var a = 1 + "22"; //=> a="122",字符串連接操作
var t = ‘23’;
var m = +t; // m => 23 數(shù)字
// 等價于: m = Number(t);
7.減法運算符
減法運算符:只有數(shù)學減法運算焦辅。不具備字符串鏈接功能。
比如: var t = 3 - '2'; // => 1
減法運算符也具備將變量轉(zhuǎn)換為數(shù)值類型的作用
8.布爾相關(guān)的運算符
關(guān)系運算符
關(guān)系運算符返回的都是 boolean 類型結(jié)果椿胯。
大于 >
2 > 3 //false
"32" > "223" // true,字符串比較的是字符串的編碼大小筷登。
小于 <
2 < 3 //true
小于等于 <= var a = 22, b = 22; a<=b//true
大于等于 >= 22 >22 //true 33>=22 //true
邏輯運算符的規(guī)則
如果兩個數(shù)都是數(shù)值,則執(zhí)行數(shù)值比較
如果兩個數(shù)都是字符串,則比較兩個字符串對應(yīng)的字符編碼值
如果一個操作數(shù)是數(shù)值,則將另一個操作數(shù)作為一個數(shù)值,然后執(zhí)行數(shù)值比較
如果一個操作數(shù)是對象,則調(diào)用這個對象的valueOf()方法,用得到的結(jié)果按照前面的規(guī)則執(zhí)行比較。如果對
象沒有valueOf()方法,則調(diào)用toString()方法,并用得到的結(jié)果根據(jù)前面的規(guī)則進行比較.
如果操作數(shù)是布爾值,則先將其轉(zhuǎn)換為數(shù)值,然后再執(zhí)行比較
Ascii 碼表地址:
https://baike.baidu.com/item/ASCII/309296?fr=aladdin&fromid=19660475&fromtitle=ascii%E7%A0%81%E8%A1%A8
9.邏輯操作符
邏輯非
邏輯非的符號用“哩盲!”取相反的意思前方。 比如: var a = true; a = !a; //a = false;
邏輯與
邏輯與是用兩個“&&”符號運算
var a = true, b = true; a&&b;//true
同時為真時才返回 true,其他 false
邏輯或
用兩個豎線連接兩個變量運算(||)
var a = true, b = true; a||b //true
兩個變量只要有一個為真廉油,那么就返回 true惠险。
&&短路表達式 *** 由于進行邏輯運算的變量不一定都是 Boolean 類型
非 Boolean 類型的&&邏輯運算返回第一個為假值或者最后一個真值的操作數(shù)(直接量、表達式)的值抒线,可
以不是 Boolean 類型班巩。
比如:
89 && (9 < 3) // => true
0 && 98 // => 0, 注意不是 false
null && 1 // => null
類似短路表達式,||運算符可以返回第一個真值或者最后一個假值嘶炭。
|| 類型安全返回處理
有的時候為了防止變量為空抱慌,可以設(shè)置一個保底的結(jié)果。
t = max || max-width || 500;
10.相等運算符
數(shù)值相等 == 類型可以不相同眨猎,值相等就可以抑进。
var a = 3, b = "3"; a==b;//true
不等于 != 值不等就返回 true,值相等就直接返回 false
3!=4 //true
3 != "3" //false
特殊情況:
NaN 跟任何其他變量都不等宵呛,甚至不等于自己单匣。
NaN != NaN//true
null == undefined 都是空的意思夕凝。
全等運算符 === 全等就是數(shù)值相等而且類型相同宝穗。
55 =="55" //true
55 === "55" //false,值轉(zhuǎn)換后相等,但是類型不同码秉。
不全等運算符 !== 只要類型不同或者值不等那么就返回 true
11. 條件運算符
條件運算符: 判斷值表達式 逮矛?true 返回值 1 :false 返回值 2。
var b = a > 3 ? 2 : 1; //語義:a 大于 3 嗎转砖?如果大于返回 2须鼎,如果不大于返回 1;
var b = 判斷表達式 府蔗? 值 1 : 值 2晋控;
當判斷表達式為 true 的時候,返回值 1姓赤。
12.賦值運算符
等號赡译,就是最常用的賦值運算符。
var a = 9;
var a = 9, b = 3, c =4;
賦值和算數(shù)運算符結(jié)合簡寫
a = a + 10;//當+-*/運算符跟自己進行運算時可用簡寫成
a += 10;// 跟 a = a + 10 效果一樣不铆。
a *= 2; a -= 3; a/= 3; 4%=2;
13.逗號運算符
逗號運算符蝌焚,可用讓 js 在一條語句中執(zhí)行多次操作裹唆。
比如:
var a = 2, b = 3, c =4;//一次性定義 3 個變量,并分別給變量賦值只洒。 逗號運算符在用于賦值操作的
時候许帐,永遠只返回最后一個值
比如:
a = (2,3,4);//a=4
14.運算符的優(yōu)先級
? 結(jié)合性:
? 一元+,一元減毕谴,后置++成畦,后置--,涝开!求反羡鸥,typeof,=賦值忠寻,+=惧浴,*=,/=,%= 是從右向左結(jié)合奕剃,
其他都是從左向右結(jié)合衷旅。
? +a; -c; a++; c--; !true; typeof a; a=b=c=9;
? 其他的都是:從左向右結(jié)合。比如: c = a+b;
? 優(yōu)先級
? 第一級:() 圓括號 =>(a+b)*c 先運算a+b
? 第二級:后置遞增和遞減 a++ b--
? 第三級:邏輯纵朋!柿顶,一元+-,前置遞增和遞減操软,typeof
? 第四級:* / %
? 第五級:二元+ -
? 第六級:< > >= <= =>a+b > c*d
? 第七級: && || => a>b || c<d
? 第八級: 嘁锯? : 條件運算符 => c= a && b ? 1: 2
? 第九級: 賦值運算符 = += *= -= /= %=
? 第十級:逗號 a = 1, b = 2;
15.綜合練習
題目:
var a = '1', b = 3, c = true;
求下面的值:
a > b => false 轉(zhuǎn)數(shù)字比較
a >= c => false 轉(zhuǎn)成字符比較
!(b) => false
!!a => true
a+b => '13'
b + c => 4
b - a => 3-1 =>2
b && a => true
!(a || b) => false
a > b && c < a =>false
+c =>1
++a+c => 3
++b + 'ssss' =>'4ssss'
6 / 0 => Infinity
NaN * 0 =>NaN
b > c ? ++a: c; =>3