邏輯運算符
JS中有三種邏輯運算符?
! 非?
!可以用來對一個值進行非運算 - 所謂非運算就是值對一個布爾值進行取反操作扯饶, true變false泼橘,false變true
如果對一個值進行兩次取反,它不會變化? ? ? ? - 如果對非布爾值進行元素,則會將其轉(zhuǎn)換為布爾值良瞧,然后再取反(可以把一個其他的數(shù)據(jù)類型轉(zhuǎn)換為布爾值)
可以為一個任意數(shù)據(jù)類型取兩次反,來將其轉(zhuǎn)換為布爾值训唱,原理和Boolean()函數(shù)一樣?
&& 與
&&可以對符號兩側(cè)的值進行與運算并返回結(jié)果? ? ? ? ?
運算規(guī)則??
? ? ? ? ? ? ? 兩個值中只要有一個值為false就返回false褥蚯,
? ? ? ? ? ? ? 只有兩個值都為true時,才會返回true
JS中的“與”屬于短路的與
? ? ? ? ? ? ? 如果第一個值為false雪情,則不會看第二個值? ? ??
|| 或? ? ? ??
||可以對符號兩側(cè)的值進行或運算并返回結(jié)果? ? ? ? ?
運算規(guī)則
? ? ? ? ? ? ? 兩個值中只要有一個true遵岩,就返回true
? ? ? ? ? ? ? 如果兩個值都為false你辣,才返回false
?JS中的“或”屬于短路的或
? ? ? ? ? ? ? 如果第一個值為true巡通,則不會檢查第二個值
? ? ? var a = false;
? ? ? a = !a;//取反變true
? ? ? a = !!a;//不變
? ? ? var b = 10;
? ? ? b = !b;//變false
? ? ? b = !!b;//變true
? ? ? console.log(typeof b);
? ? ? console.log("b = " + b);
? ? ? && 遇到false即false
? ? ? var result = true && true;//true
? ? ? var result = true && false;//false
? ? ? var result = false && true;//false
? ? ? var result = false && false;//false
? ? ? || 遇true即true
? ? ? var result = true || true;//true
? ? ? var result = true || false;//true
? ? ? var result = false || true;//true
? ? ? var result = false || false;//false
? ? ? result = NaN && 0;// NaN false && false
? ? ? result = 0 && NaN;//0
? ? ? && 遇到false即false
? ? ? result = 1 && 2;//
? ? ? result = 2 && 1;//1
? ? ? result = 0 && 2;//0 false && true
? ? ? result = 2 && 0;//0 true && false
? ? ? result = NaN && 0;//NaN false && false
? ? ? result = 0 && NaN;//0
? ? ? || 遇true即true
? ? ? result = 2 || 1;//2
? ? ? result = 2 || NaN;//2
? ? ? result = 2 || 0;//2
? ? ? result = NaN || 1;//1 false || true
? ? ? result = NaN || 0;//0
? ? ? result = '' || 'hello';// hello false || true
? ? ? result = -1 || '您好';//-1 true || true
與或運算符
&& || 非布爾值的情況 - 對于非布爾值進行與或運算時,會先將其轉(zhuǎn)換為布爾值舍哄,然后再運算宴凉,并且返回原值
與運算: 如果第一個值為true,則必然返回第二個值? 如果第一個值為false表悬,則直接返回第一個值 弥锄;如果兩個值都為true,則返回后邊的蟆沫;如果兩個值中有false籽暇,則返回靠前的false
或運算: 如果第一個值為true,則直接返回第一個值? 如果第一個值為false饭庞,則返回第二個值
賦值運算符
=
? 可以將符號右側(cè)的值賦值給符號左側(cè)的變量+=
? a += 5 等價于a = a + 5
-=
? a -= 5 等價于a = a - 5
*=
? a *= 5 等價于a = a5
/=
? a /= 5 等價于a = a / 5
%=
? a %= 5 等價于 a = a % 5
關系運算符
通過關系運算符可以比較兩個值之間的大小關系戒悠,
如果關系成立它會返回true,如果關系不成立則返回false
> 大于號? 判斷符號左側(cè)的值是否大于右側(cè)的值? ? 如果關系成立舟山,返回true绸狐,如果關系不成立則返回false(非數(shù)值型比較前要先轉(zhuǎn)化為數(shù)字卤恳,字符串前加+會變成數(shù)字,符號兩邊都是字符串會比較Unicode的編碼)
>= 大于等于? 判斷符號左側(cè)的值是否大于或等于右側(cè)的值
< 小于號
<= 小于等于
非數(shù)值的情況? - 對于非數(shù)值進行比較時寒矿,會將其轉(zhuǎn)換為數(shù)字然后再比較? - 如果符號兩側(cè)的值都是字符串時突琳,不會將其轉(zhuǎn)換為數(shù)字進行比較,而會分別比較字符串中字符的Unicode編碼
任何值和NaN比較都是false
相等運算符
相等運算符用來比較兩個值是否相等符相,
如果相等會返回true拆融,否則返回false
==?
相等? ?當使用==來比較兩個值時,如果值的類型不同啊终,則會自動進行類型轉(zhuǎn)換冠息,將其轉(zhuǎn)換為相同的類型,然后再比較
!=?
不相等? 不相等用來判斷兩個值是否不相等孕索,如果不相等返回true逛艰,否則返回false
來做不相等運算? ?不相等也會對變量進行自動的類型轉(zhuǎn)換,如果轉(zhuǎn)換后相等它也會返回false
===
全等? ?用來判斷兩個值是否全等搞旭,它和相等類似散怖,不同的是它不會做自動的類型轉(zhuǎn)換
如果兩個值的類型不同,直接返回false
!==
不全等? 用來判斷兩個值是否不全等肄渗,和不等類似镇眷,不同的是它不會做自動的類型轉(zhuǎn)換
如果兩個值的類型不同,直接返回true
條件運算符
條件運算符也叫三元運算符?
語法: 條件表達式?語句1:語句2;?
執(zhí)行的流程: 條件運算符在執(zhí)行時翎嫡,首先對條件表達式進行求值欠动, 如果該值為true,則執(zhí)行語句1惑申,并返回執(zhí)行結(jié)果 如果該值為false具伍,則執(zhí)行語句2,并返回執(zhí)行結(jié)果 如果條件的表達式的求值結(jié)果是一個非布爾值圈驼,會將其轉(zhuǎn)換為布爾值然后在運算
true ? alert("語句1") : alert("語句2");