01) 一元操作符
++,--,+,-操作符應用任何型別數值都返回乙個【數值型別】,先將任意型別的值轉換為number然後進行運算(通過number()方法進行轉換)
1.遞增 ++
var a = "11";
1+a++;
1+ ++a;
前置:操作該變數之前進行遞增或者遞減操作
後置:操作該變數之後進行遞增或者遞減操作
對任意資料型別的運算元都適用,使用前先將其轉換為數字(number()),然後再進行運算,在應用於物件的時候,優先先呼叫物件的valueof方法,以取得乙個可供操作的值,如果子類物件僅重寫了tostring(),呼叫該方法。
2.遞減 --
前置:操作該變數之前進行遞增或者遞減操作
後置:操作該變數之後進行遞增或者遞減操作
對任意資料型別的運算元都適用,使用前先將其轉換為數字,然後再進行運算在應用於物件的時候,先呼叫物件的valueof方法,以取得乙個可供操作的值,如果子類物件僅重寫了tostring(),呼叫該方法。
3.加 +
相當於呼叫number();
var a = "12"
+a ; // 12 相當於呼叫了number("12")
4.減 -
將一元減應用於數值時,數值會變成負數。
將一元減應用於非數值時,遵循與一元加操作符相同的規則,最後將得到的數值轉化為負數
02) 布林操作符, 非(not)
邏輯非 !
該操作符應用任何型別數值都返回乙個【布林值】。先將任意型別的數值轉換為boolean,然後取反,
!a ==> !boolean(a)
!0 //true
!"" //true
!nan //true
!false //true
連用兩次邏輯非 ,就可以將任意資料型別轉化為boolean型別,!!a ==> boolean(a)
!!"" //false
03) 邏輯與 && (同真才真,有假則假) 也被稱為短路語句
可應用於任意數值。如果有乙個運算元不是布林型別,邏輯與就不一定返回boolean型別
1.如果第乙個運算元是
null,nan,undefined,false,0,""可被轉換為false的值的時候返回該值
2.如果第乙個數其他,返回第二個數
var s1 = 8;
var s2 = "briup";
var s3 = "";
var result = s1 && s2; //briup
var result2 = s3 && s2; //空字串
04) 邏輯或 ||(有真則真,同假才假)
false ||
如果兩個運算元都是null,nan,undefined,false,0,""可被轉換為false的值的時候返回該值
如果第乙個運算元是null,nan,undefined,false,0,"" 則返回第二個運算元
05) 加性操作符
1. 加法 +
m + n
1) 當m,n不為string,object型別的時候,先將m,n轉換為number型別,然後再進行計算
true + false; //1;number(true)+number(false);
true + 1; //2;number(true) + 1
null + undefined; //nan;number(undefined) -> nan
2) 當m,n有乙個為string,無論另乙個運算元為何(但不為物件)都要轉換為string,然後再進行拼接
"1" + true; // 1true
"1" + undefined;// 1undefined
"1" + 1; // 11
3) 當m,n 有乙個為物件,如果該物件既重寫tostring,又重寫了valueof方法,先呼叫valueof方法獲取返回值,將該返回值和另外乙個運算元進行運算。如果該物件沒有重寫valueof方法,將呼叫tostring方法獲取返回值,將該返回值和另外乙個運算元進行運算。
var o = {
name:"briup",
valueof:function(){
return "1";
o+1; //2;o+1
2. 減法 -
返回值為【數值型別】。無論運算元為任何型別,先將其使用number()轉換器轉換為number型別,然後再計算。
true - 1; //0; 1-1
null - true; //-1 ; 0-1
1 - undefined //nan
var o = {
name:"briup",
valueof:function(){
return 1;
o-1; //0; 1-1
06) 乘性操作符
返回值為【數值型別】當運算元為非數值的時候執行自動的型別轉化number()
1. 乘法 *
如果兩個數都是數值,執行常規的乘法計算
如果乙個運算元是nan,結果為nan
超過數值範圍返回infinity
如果有乙個運算元不是數值,則先呼叫number()將其轉換為數值。
2. 除法 /
如果乙個運算元是nan,結果為nan (0/0 ; nan)
乙個非0值除0 infinity
如果有乙個運算元不是數值,則先呼叫number()將其轉換為數值。
var s1 = 5;
var s2 = 2;
var result = s1/s2;
3. 取餘 %
如果兩個數都是數值,執行常規的取餘計算
如果乙個運算元是nan,結果為nan(任意數%0 ; nan)
如果有乙個運算元不是數值,則先呼叫number()將其轉換為數值。
07) 關係操作符
< > <= >= ,返回乙個【boolean】值
1.如果兩個運算元是字串,比較字串中對應位置的每個字元的字元編碼值
"a">"b" //false
"1">"a" //false
2.如果乙個運算元是數值,將另外乙個運算元也轉換為數值進行比較
"3">1; //true
3>true; //true 3>number(true)
3>undefined; //false number(undefined)=nan ;任何數和nan比較結果都為false
3.如果乙個運算元是物件,先呼叫valueof(),再呼叫tostring()將返回值與另外乙個運算元比較,如果沒有重寫tostring() valueof()則始終為false
var o = {
name:"briup",
valueof:function(){
return "13";
o>2 // true ; "13">2
08) 相等操作符,返回【boolean】
1.相等和不相等 ==, != (先轉換在比較)
1)number型別與boolean型別,比較前先將boolean轉換為數值。
2)number型別與字串型別,比較前先將字串轉換為數值
3)number型別與undefined型別,結果為 false
4)number型別與null型別,結果為 false
5)如果兩個都是字串,比較字串行
6)如果兩個都是物件,比較的是物件的引用位址
7)null == undefined //true
8)nan與任何值(包括nan)比較結果都為false
如果兩個數都為物件,則比較他們是不是同乙個物件,如果兩個運算元都指向同乙個物件,返回true
如果乙個數是物件,另外乙個數不是,則呼叫valuesof()方法,用得到的基本資料型別進行比較
2.全等和不全等
僅比較不轉換,先比較兩個數所屬的資料型別,如果型別不同則不同,如果型別相同,再繼續比較兩個數的值
console.log("55" == 55); true
console.log("55" === 55);false
null == undifined; //true
null === undifined; //false
09) 三目運算子 ? :
variable = boolean_expression ? true_value : false_value;
如果boolean_expression為true,將true_value賦給variable,否則將false_value賦給variable
例如:求任意兩個數之間最大值
function max(m,n){
return m>n?m:n; //如果m>n為true返回m,如果m>n為false,返回n
10) 賦值運算子 =
將右側的值賦給左側的變數
可以和其他算術運算子連用 *= /= %= += -=
var a = 4;
a *= 3; //=> a = a*3;
11) 逗號操作符
可以在一條語句中執行多個操作
var num1=1,num2 = 2, num3 = 3;
JavaScript中「 」和「 」操作符
1 邏輯或 從字面上來說,只有前後都是false的時候才返回false,否則返回true。1 2 3 4 alert true false true alert false true true alert true true true alert false false false 這個傻子都知道 ...
JavaScript中比較操作符
var s var ss 0 typeof s為string 字串為空 則表示boolean型別的false number中0代表false 1代表true typeof false為boolean 值要相同,同時型別也要相同,屬於嚴格上的比較 if ss false alert 不嚴格比較 n字串...
JavaScript操作符優雅運用
if hasmoney elsehasmoney console.log 今天吃肉 console.log 今天吃素 let weekendplan hasmoney 今天吃肉 今天吃素 if hasmoney hasmoney console.log 今天是工作日 undefined hasmon...