JavaScript基礎(chǔ)-關(guān)系運(yùn)算符和邏輯運(yùn)算符

關(guān)系運(yùn)算符

為什么要學(xué)習(xí)關(guān)系運(yùn)算符?
默認(rèn)情況下蝙砌,我們在程序中寫的每一句正確代碼都會被執(zhí)行叉跛。但很多時候松忍,我們想在某個條件成立的情況下才執(zhí)行某一段代碼
這種情況的話可以使用條件語句來完成,但是學(xué)習(xí)條件語句之前筷厘,我們先來看一些更基礎(chǔ)的知識:如何判斷一個條件成不成立鸣峭。

JavaScript中的真假性

在JavaScript中,條件成立稱為“真”敞掘,條件不成立稱為“假”叽掘,因此,判斷條件是否成立就是判斷條件的“真假”玖雁。
在JavaScript已經(jīng)給我們定義好了一個Boolean類型的值, 取值是true和false, true代表真, false代表假
而接下來我們要學(xué)習(xí)的關(guān)系運(yùn)算符它的返回值正好就是Boolean類型的值, 也就是說關(guān)系運(yùn)算符的返回值要么是true,要么是false

關(guān)系運(yùn)算符

在程序中經(jīng)常需要比較兩個量的大小關(guān)系,以決定程序下一步的工作更扁。比較兩個量的運(yùn)算符稱為關(guān)系運(yùn)算符。

符號 運(yùn)算符 結(jié)合性
> 大于 左結(jié)合
< 小于 左結(jié)合
>= 大于等于 左結(jié)合
<= 小于等于 左結(jié)合
== 判斷值是否相等 左結(jié)合
!= 判斷值是否不相等 左結(jié)合
=== 判斷值和類型是否相等 左結(jié)合
!== 判斷值和類型是否不相等 左結(jié)合

簡單示例

    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

特殊示例

  • 對于非數(shù)值進(jìn)行比較時赫冬,會將其轉(zhuǎn)換為數(shù)字然后在比較
    console.log(1 > true); //false
    console.log(1 >= false); //true
    console.log(1 > "0"); //true
    console.log(1 > null); //true
    
  • 如果符號兩側(cè)的值都是字符串時浓镜,不會將其轉(zhuǎn)換為數(shù)字進(jìn)行比較, 而會分別比較字符串中字符的Unicode編碼

  • Unicode編碼轉(zhuǎn)換地址

    // a的Unicode編碼是:0061
    // b的Unicode編碼是:0062
    console.log("a" < "b");//true
    
    // 比較多位時則是從前往后一位一位比較
    // 第一位相同比較第二位, 直到比較到不一樣或者結(jié)束為止
    // c的Unicode編碼是:0063
    console.log("ab" < "ac");//true
    
  • null、undefined 劲厌、NaN比較

    console.log(null == 0); // false
    console.log(undefined == 0); // false
    // 永遠(yuǎn)不要判斷兩個NaN是否相等
    console.log(NaN == NaN); // false
    
    /*
     * 可以通過isNaN()函數(shù)來判斷一個值是否是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;
    
    // == 判斷值是否相等
    // == 會進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換
    console.log("123" == 123); // true
    // === 判斷值和類型時候同時相等
    // === 不會進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換
    console.log("123" === 123); // false
    

練習(xí)

計算下列表達(dá)式的值
3 > 4 + 7
(3>4) + 7
5 != 4 + 2 * 7 > 3 == 10

  • Tips: 利用Unicode編碼可以在控制臺和網(wǎng)頁中輸出一些牛逼的符號
    // 在控制臺中直接使用Unicode編碼即可
    console.log("\u2764"); // ?
    // 在網(wǎng)頁中需要以&#開頭, 然后將十六進(jìn)制2764轉(zhuǎn)換為十進(jìn)制

邏輯運(yùn)算符

為什么要學(xué)習(xí)邏輯運(yùn)算符?
有時候,我們需要在多個條件同時成立的時候才能執(zhí)行某段代碼
比如:用戶只有同時輸入了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都成立時硼婿,結(jié)果才為true锌半;其余情況的結(jié)果都為false。因此寇漫,條件A或條件B只要有一個不成立刊殉,結(jié)果都為false
口訣:一假則假

  • 邏輯與運(yùn)算過程
    總是先判斷條件A是否成立
    如果條件A成立,接著再判斷條件B是否成立:如果條件B成立州胳,“條件A && 條件B”的結(jié)果就為true记焊,如果條件B不成立,結(jié)果就為false
    如果條件A不成立栓撞,就不會再去判斷條件B是否成立:因?yàn)闂l件A已經(jīng)不成立了亚亲,不管條件B如何結(jié)果肯定是false
//如果兩個值都是true則返回true
var result = true && true;

//只要有一個false,就返回false
result = true && false;
result = false && true;
result = false && false;
  • 邏輯與短路現(xiàn)象
  //第一個值為true,會檢查第二個值
  true && alert("這哥們來了0乒椤肛响!");

  //第一個值為false,不會檢查第二個值
  false && alert("這哥們不會來了O鳌特笋!");

注意點(diǎn):

  • 對于非Boolean類型的數(shù)值, 邏輯與會將其悄悄咪咪轉(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只要有一個成立時(也包括條件A和條件B都成立),結(jié)果就為true巾兆;只有當(dāng)條件A和條件B都不成立時猎物,結(jié)果才為false
口訣:一真為真

  • 邏輯或運(yùn)算過程
    總是先判斷條件A是否成立
    如果條件A成立,就不會再去判斷條件B是否成立:因?yàn)闂l件A已經(jīng)成立了角塑,不管條件B如何結(jié)果肯定是1蔫磨,也就是true
    如果條件A不成立,接著再判斷條件B是否成立:如果條件B成立圃伶,“條件A || 條件B”的結(jié)果就為true堤如,如果條件B不成立,結(jié)果就為false
//兩個都是false窒朋,則返回false
var result = false || false;

//只有有一個true搀罢,就返回true
result = true || false;
result = false || true ;
result = true || true ;
  • 邏輯或短路現(xiàn)象
  //第一個值為false,則會檢查第二個值
  false || alert("123");

  //第一個值為true侥猩,則不再檢查第二個值
  true || alert("123");

注意點(diǎn):

  • 對于非Boolean類型的數(shù)值, 邏輯與會將其悄悄咪咪轉(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í)就是對條件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):

  • 對一個值進(jìn)行兩次取反枫弟,它不會變化
var bool = true;
var res = !!bool;
console.log(res); // true
  • 對非布爾值進(jìn)行元素,則會將其轉(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ù)一樣

參考鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市驼仪,隨后出現(xiàn)的幾起案子掸犬,更是在濱河造成了極大的恐慌,老刑警劉巖绪爸,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件湾碎,死亡現(xiàn)場離奇詭異,居然都是意外死亡奠货,警方通過查閱死者的電腦和手機(jī)介褥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人柔滔,你說我怎么就攤上這事溢陪。” “怎么了睛廊?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵形真,是天一觀的道長。 經(jīng)常有香客問我超全,道長咆霜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任嘶朱,我火速辦了婚禮蛾坯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疏遏。我一直安慰自己脉课,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布改览。 她就那樣靜靜地躺著下翎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宝当。 梳的紋絲不亂的頭發(fā)上视事,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機(jī)與錄音庆揩,去河邊找鬼俐东。 笑死,一個胖子當(dāng)著我的面吹牛订晌,可吹牛的內(nèi)容都是我干的虏辫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼锈拨,長吁一口氣:“原來是場噩夢啊……” “哼砌庄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奕枢,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤娄昆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后缝彬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萌焰,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年谷浅,在試婚紗的時候發(fā)現(xiàn)自己被綠了扒俯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奶卓。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撼玄,靈堂內(nèi)的尸體忽然破棺而出夺姑,到底是詐尸還是另有隱情,我是刑警寧澤互纯,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布瑟幕,位于F島的核電站,受9級特大地震影響留潦,放射性物質(zhì)發(fā)生泄漏只盹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一兔院、第九天 我趴在偏房一處隱蔽的房頂上張望殖卑。 院中可真熱鬧,春花似錦坊萝、人聲如沸孵稽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽菩鲜。三九已至,卻和暖如春惦积,著一層夾襖步出監(jiān)牢的瞬間接校,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工狮崩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛛勉,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓睦柴,卻偏偏與公主長得像诽凌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子坦敌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 關(guān)系運(yùn)算符 為什么要學(xué)習(xí)關(guān)系運(yùn)算符?默認(rèn)情況下侣诵,我們在程序中寫的每一句正確代碼都會被執(zhí)行。但很多時候狱窘,我們想在某個...
    極客江南閱讀 2,357評論 3 23
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)杜顺,也就是一...
    悟名先生閱讀 4,131評論 0 13
  • 一元操作符++,--操作符操作示例 +,-操作符+基本是原樣輸出 布爾操作符邏輯非 ! 如果前面再加上個!會看起來...
    togeek閱讀 589評論 3 3
  • 關(guān)于昨晚的一個辯題:作品和人品哪個重要妇拯?或說你比較看重什么幻馁? 我的回答無疑是:人品洗鸵。 之前在網(wǎng)文界中流傳著一句話,...
    冰寒三尺閱讀 971評論 2 12
  • 單位組織演講比賽仗嗦,被點(diǎn)名參賽膘滨。投稿日期全部被定死,不想?yún)⒓右矝]辦法稀拐,不想學(xué)稿也沒辦法火邓。初稿投稿日期一到在,只好硬著...
    成長簡單就好閱讀 172評論 0 0