關(guān)系運(yùn)算符
-
為什么要學(xué)習(xí)關(guān)系運(yùn)算符?
- 默認(rèn)情況下,我們?cè)诔绦蛑袑懙拿恳痪湔_代碼都會(huì)被執(zhí)行佛掖。但很多時(shí)候,我們想在某個(gè)條件成立的情況下才執(zhí)行某一段代碼
- 這種情況的話可以使用條件語句來完成涌庭,但是學(xué)習(xí)條件語句之前芥被,我們先來看一些更基礎(chǔ)的知識(shí):如何判斷一個(gè)條件成不成立。
-
JavaScript中的真假性
- 在JavaScript中坐榆,條件成立稱為“真”拴魄,條件不成立稱為“假”,因此席镀,判斷條件是否成立就是判斷條件的“真假”匹中。
- 在JavaScript已經(jīng)給我們定義好了一個(gè)Boolean類型的值, 取值是true和false, true代表真, false代表假
- 而接下來我們要學(xué)習(xí)的關(guān)系運(yùn)算符它的返回值正好就是Boolean類型的值, 也就是說關(guān)系運(yùn)算符的返回值要么是true,要么是false
-
關(guān)系運(yùn)算符
- 在程序中經(jīng)常需要比較兩個(gè)量的大小關(guān)系,以決定程序下一步的工作。比較兩個(gè)量的運(yùn)算符稱為關(guān)系運(yùn)算符豪诲。
序號(hào) | 運(yùn)算符 | 結(jié)合性 | |
---|---|---|---|
1 | > | 大于 | 左結(jié)合 |
2 | < | 小于 | 左結(jié)合 |
3 | >= | 大于等于 | 左結(jié)合 |
4 | <= | 小于等于 | 左結(jié)合 |
5 | == | 判斷值是否相等 | 左結(jié)合 |
6 | != | 判斷值是否不相等 | 左結(jié)合 |
7 | === | 判斷值和類型是否相等 | 左結(jié)合 |
8 | !== | 判斷值和類型是否不相等 | 左結(jié)合 |
- 簡(jiǎn)單示例
var a, b;
a = 10;
b = 10;
console.log(a > b); // false
console.log(a < b); // false
console.log(a >= b); // true
console.log(a <= b); // true
console.log(a == b); // true
console.log(a != b); // false
-
特殊示例
-
對(duì)于非數(shù)值進(jìn)行比較時(shí)顶捷,會(huì)將其轉(zhuǎn)換為數(shù)字然后在比較
console.log(1 > true); //false console.log(1 >= false); //true console.log(1 > "0"); //true console.log(1 > null); //true
如果符號(hào)兩側(cè)的值都是字符串時(shí),不會(huì)將其轉(zhuǎn)換為數(shù)字進(jìn)行比較, 而會(huì)分別比較字符串中字符的Unicode編碼
-
// a的Unicode編碼是:0061 // b的Unicode編碼是:0062 console.log("a" < "b");//true // 比較多位時(shí)則是從前往后一位一位比較 // 第一位相同比較第二位, 直到比較到不一樣或者結(jié)束為止 // c的Unicode編碼是:0063 console.log("ab" < "ac");//true
-
null屎篱、undefined 服赎、NaN比較
console.log(null == 0); // false console.log(undefined == 0); // false // 永遠(yuǎn)不要判斷兩個(gè)NaN是否相等 console.log(NaN == NaN); // false /* * 可以通過isNaN()函數(shù)來判斷一個(gè)值是否是NaN * 如果該值是NaN則返回true,否則返回false */ var num = NaN; console.log(isNaN(num)); // true // undefined 衍生自 null, 所以返回true console.log(null == undefined); // true; console.log(null === undefined); // false; // == 判斷值是否相等 // == 會(huì)進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換 console.log("123" == 123); // true // === 判斷值和類型時(shí)候同時(shí)相等 // === 不會(huì)進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換 console.log("123" === 123); // false
-
-Tips: 利用Unicode編碼可以在控制臺(tái)和網(wǎng)頁中輸出一些牛逼的符號(hào)
// 在控制臺(tái)中直接使用Unicode編碼即可 console.log("\u2764"); // ? // 在網(wǎng)頁中需要以&#開頭, 然后將十六進(jìn)制2764轉(zhuǎn)換為十進(jìn)制 <div>❤</div>
邏輯運(yùn)算符
- 為什么要學(xué)習(xí)邏輯運(yùn)算符?
有時(shí)候交播,我們需要在多個(gè)條件同時(shí)成立的時(shí)候才能執(zhí)行某段代碼
比如:用戶只有同時(shí)輸入了QQ和密碼重虑,才能執(zhí)行登錄代碼,如果只輸入了QQ或者只輸入了密碼秦士,就不能執(zhí)行登錄代碼缺厉。這種情況下,我們就要借助于JavaScript提供的邏輯運(yùn)算符隧土。
-
JavaScript中提供了三種邏輯運(yùn)算符:
&&(與運(yùn)算) ||(或運(yùn)算) !(非運(yùn)算)
邏輯與
格式: 條件A && 條件B
-
運(yùn)算結(jié)果:
- 只有當(dāng)條件A和條件B都成立時(shí)提针,結(jié)果才為true;其余情況的結(jié)果都為false次洼。因此关贵,條件A或條件B只要有一個(gè)不成立,結(jié)果都為false
- 口訣:一假則假
-
邏輯與運(yùn)算過程
總是先判斷條件A是否成立
如果條件A成立卖毁,接著再判斷條件B是否成立:如果條件B成立,“條件A && 條件B”的結(jié)果就為true,如果條件B不成立亥啦,結(jié)果就為false
-
如果條件A不成立炭剪,就不會(huì)再去判斷條件B是否成立:因?yàn)闂l件A已經(jīng)不成立了,不管條件B如何結(jié)果肯定是false
//如果兩個(gè)值都是true則返回true var result = true && true; //只要有一個(gè)false翔脱,就返回false result = true && false; result = false && true; result = false && false;
-
邏輯與短路現(xiàn)象
//第一個(gè)值為true奴拦,會(huì)檢查第二個(gè)值 true && alert("這哥們來了!届吁!"); //第一個(gè)值為false错妖,不會(huì)檢查第二個(gè)值 false && alert("這哥們不會(huì)來了!疚沐!");
-
注意點(diǎn):
對(duì)于非Boolean類型的數(shù)值, 邏輯與會(huì)將其悄悄咪咪轉(zhuǎn)換為Boolean類型來判斷
如果條件A不成立, 則返回條件A的數(shù)值本身
-
如果條件A成立, 不管條件B成不成立都返回條件B數(shù)值本身
var result = "123" && "abc"; console.log(result); // "abc" result = "123" && 0; console.log(result); // 0 result = null && 0; console.log(result); // null
邏輯或
格式: 條件A || 條件B
-
運(yùn)算結(jié)果:
- 當(dāng)條件A或條件B只要有一個(gè)成立時(shí)(也包括條件A和條件B都成立)暂氯,結(jié)果就為true;只有當(dāng)條件A和條件B都不成立時(shí)亮蛔,結(jié)果才為false
- 口訣:一真為真
-
邏輯或運(yùn)算過程
總是先判斷條件A是否成立
如果條件A成立痴施,就不會(huì)再去判斷條件B是否成立:因?yàn)闂l件A已經(jīng)成立了,不管條件B如何結(jié)果肯定是1究流,也就是true
-
如果條件A不成立辣吃,接著再判斷條件B是否成立:如果條件B成立,“條件A || 條件B”的結(jié)果就為true芬探,如果條件B不成立神得,結(jié)果就為false
//兩個(gè)都是false,則返回false var result = false || false; //只有有一個(gè)true偷仿,就返回true result = true || false; result = false || true ; result = true || true ;
-
邏輯或短路現(xiàn)象
//第一個(gè)值為false哩簿,則會(huì)檢查第二個(gè)值 false || alert("123"); //第一個(gè)值為true,則不再檢查第二個(gè)值 true || alert("123");
-
注意點(diǎn):
對(duì)于非Boolean類型的數(shù)值, 邏輯與會(huì)將其悄悄咪咪轉(zhuǎn)換為Boolean類型來判斷
如果條件A不成立, 則不管條件B成不成立都返回條件B數(shù)值本身
-
如果條件A成立, 則返回條件A的數(shù)值本身
var result = null || 0; console.log(result); // 0 result = "123" || "abc"; console.log(result); // "123" result = "123" || 0; console.log(result); // "123"
邏輯非
格式: ! 條件A
-
運(yùn)算結(jié)果:
其實(shí)就是對(duì)條件A進(jìn)行取反:若條件A成立炎疆,結(jié)果就為false卡骂;若條件A不成立,結(jié)果就為true形入。也就是說:真的變假全跨,假的變真。
-
口訣:真變假,假變真
var bool1 = true; var res1 = !bool1; console.log(res1); // false var bool2 = false; var res2 = !bool2; console.log(res2); // true
-
注意點(diǎn):
-
對(duì)一個(gè)值進(jìn)行兩次取反亿遂,它不會(huì)變化
var bool = true; var res = !!bool; console.log(res); // true
-
對(duì)非布爾值進(jìn)行元素浓若,則會(huì)將其轉(zhuǎn)換為布爾值,然后再取反
var num = 10; var res = !num; // 先將10轉(zhuǎn)換為true, 然后再取反 console.log(res); // false
所以, 要想將其它類型轉(zhuǎn)換為Number類型除了Boolean()函數(shù), 還可以使用
!!數(shù)值;
值得注意的是
!!數(shù)值;
的形式,實(shí)現(xiàn)原理和Boolean()函數(shù)一樣
-