整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          前端入門教程之 JS 「比較運算符」值的比較 javascript學習

          們知道,在數學中有很多用于比較大小的運算符。

          在 JavaScript 中,它們的編寫方式如下:

          • 大于 / 小于:a > b,a < b。
          • 大于等于 / 小于等于:a >= b,a <= b。
          • 檢查兩個值的相等:a == b,請注意雙等號 == 表示相等性檢查,而單等號 a = b 表示賦值。
          • 檢查兩個值不相等:不相等在數學中的符號是 ≠,但在 JavaScript 中寫成 a != b。

          在本文中,我們將進一步了解不同類型的比較,JavaScript 是如何進行比較的,包括一些重要的特殊性。

          在文末給出了一些秘訣,幫助你避免 “JavaScript 陷阱”相關的問題。

          比較結果為 Boolean 類型

          所有比較運算符均返回布爾值:

          • true —— 表示“yes(是)”,“correct(正確)”或“the truth(真)”。
          • false —— 表示“no(否)”,“wrong(錯誤)”或“not the truth(非真)”。

          示例:

          alert( 2 > 1 );  // true(正確)
          alert( 2 == 1 ); // false(錯誤)
          alert( 2 != 1 ); // true(正確)

          和其他類型的值一樣,比較的結果可以被賦值給任意變量:

          let result = 5 > 4; // 把比較的結果賦值給 result
          alert( result ); // true

          字符串比較

          在比較字符串的大小時,JavaScript 會使用“字典(dictionary)”或“詞典(lexicographical)”順序進行判定。

          換言之,字符串是按字符(母)逐個進行比較的。

          例如:

          alert( 'Z' > 'A' ); // true
          alert( 'Glow' > 'Glee' ); // true
          alert( 'Bee' > 'Be' ); // true

          字符串的比較算法非常簡單:

          1. 首先比較兩個字符串的首位字符大小。
          2. 如果一方字符較大(或較?。瑒t該字符串大于(或小于)另一個字符串。算法結束。
          3. 否則,如果兩個字符串的首位字符相等,則繼續取出兩個字符串各自的后一位字符進行比較。
          4. 重復上述步驟進行比較,直到比較完成某字符串的所有字符為止。
          5. 如果兩個字符串的字符同時用完,那么則判定它們相等,否則未結束(還有未比較的字符)的字符串更大。

          在上面的第一個例子中,'Z' > 'A' 比較在算法的第 1 步就得到了結果。

          在第二個例子中,字符串 Glow 與 Glee 的比較則需要更多步驟,因為需要逐個字符進行比較:

          1. G 和 G 相等。
          2. l 和 l 相等。
          3. o 比 e 大,算法停止,第一個字符串大于第二個。

          非真正的字典順序,而是 Unicode 編碼順序

          在上面的算法中,比較大小的邏輯與字典或電話簿中的排序很像,但也不完全相同。

          比如說,字符串比較對字母大小寫是敏感的。大寫的 "A" 并不等于小寫的 "a"。哪一個更大呢?實際上小寫的 "a" 更大。這是因為在 JavaScript 使用的內部編碼表中(Unicode),小寫字母的字符索引值更大。我們會在 字符串 這章討論更多關于字符串的細節。

          不同類型間的比較

          當對不同類型的值進行比較時,JavaScript 會首先將其轉化為數字(number)再判定大小。

          例如:

          alert( '2' > 1 ); // true,字符串 '2' 會被轉化為數字 2
          alert( '01' == 1 ); // true,字符串 '01' 會被轉化為數字 1

          對于布爾類型值,true 會被轉化為 1、false 轉化為 0。

          例如:

          alert( true == 1 ); // true
          alert( false == 0 ); // true

          一個有趣的現象

          有時候,以下兩種情況會同時發生:

          • 若直接比較兩個值,其結果是相等的。
          • 若把兩個值轉為布爾值,它們可能得出完全相反的結果,即一個是 true,一個是 false。

          例如:

          let a = 0;
          alert( Boolean(a) ); // false
          
          let b = "0";
          alert( Boolean(b) ); // true
          
          alert(a == b); // true!

          對于 JavaScript 而言,這種現象其實挺正常的。因為 JavaScript 會把待比較的值轉化為數字后再做比較(因此 "0" 變成了 0)。若只是將一個變量轉化為 Boolean 值,則會使用其他的類型轉換規則。

          嚴格相等

          普通的相等性檢查 == 存在一個問題,它不能區分出 0 和 false:

          alert( 0 == false ); // true

          也同樣無法區分空字符串和 false:

          alert( '' == false ); // true

          這是因為在比較不同類型的值時,處于相等判斷符號 == 兩側的值會先被轉化為數字。空字符串和 false 也是如此,轉化后它們都為數字 0。

          如果我們需要區分 0 和 false,該怎么辦?

          嚴格相等運算符 === 在進行比較時不會做任何的類型轉換。

          換句話說,如果 a 和 b 屬于不同的數據類型,那么 a === b 不會做任何的類型轉換而立刻返回 false。

          讓我們試試:

          alert( 0 === false ); // false,因為被比較值的數據類型不同

          同樣的,與“不相等”符號 != 類似,“嚴格不相等”表示為 !==。

          嚴格相等的運算符雖然寫起來稍微長一些,但是它能夠很清楚地顯示代碼意圖,降低你犯錯的可能性。

          對 null 和 undefined 進行比較

          當使用 null 或 undefined 與其他值進行比較時,其返回結果常常出乎你的意料。

          當使用嚴格相等 === 比較二者時

          它們不相等,因為它們屬于不同的類型。

          alert( null === undefined ); // false

          當使用非嚴格相等 == 比較二者時

          JavaScript 存在一個特殊的規則,會判定它們相等。它們倆就像“一對戀人”,僅僅等于對方而不等于其他任何的值(只在非嚴格相等下成立)。

          alert( null == undefined ); // true

          當使用數學式或其他比較方法 < > <= >= 時:

          null/undefined 會被轉化為數字:null 被轉化為 0,undefined 被轉化為 NaN。

          下面讓我們看看,這些規則會帶來什么有趣的現象。同時更重要的是,我們需要從中學會如何遠離這些特性帶來的“陷阱”。

          奇怪的結果:null vs 0

          通過比較 null 和 0 可得:

          alert( null > 0 );  // (1) false
          alert( null == 0 ); // (2) false
          alert( null >= 0 ); // (3) true

          是的,上面的結果完全打破了你對數學的認識。在最后一行代碼顯示“null 大于等于 0”的情況下,前兩行代碼中一定會有一個是正確的,然而事實表明它們的結果都是 false。

          為什么會出現這種反常結果,這是因為相等性檢查 == 和普通比較符 > < >= <= 的代碼邏輯是相互獨立的。進行值的比較時,null 會被轉化為數字,因此它被轉化為了 0。這就是為什么(3)中 null >= 0 返回值是 true,(1)中 null > 0 返回值是 false。

          另一方面,undefined 和 null 在相等性檢查 == 中不會進行任何的類型轉換,它們有自己獨立的比較規則,所以除了它們之間互等外,不會等于任何其他的值。這就解釋了為什么(2)中 null == 0 會返回 false。

          特立獨行的 undefined

          undefined 不應該被與其他值進行比較:

          alert( undefined > 0 ); // false (1)
          alert( undefined < 0 ); // false (2)
          alert( undefined == 0 ); // false (3)

          為何它看起來如此厭惡 0?返回值都是 false!

          原因如下:

          • (1) 和 (2) 都返回 false 是因為 undefined 在比較中被轉換為了 NaN,而 NaN 是一個特殊的數值型值,它與任何值進行比較都會返回 false。
          • (3) 返回 false 是因為這是一個相等性檢查,而 undefined 只與 null 相等,不會與其他值相等。

          避免問題

          我們為何要研究上述示例?我們需要時刻記得這些古怪的規則嗎?不,其實不需要。雖然隨著代碼寫得越來越多,我們對這些規則也都會爛熟于胸,但是我們需要更為可靠的方法來避免潛在的問題:

          • 除了嚴格相等 === 外,其他但凡是有 undefined/null 參與的比較,我們都需要格外小心。
          • 除非你非常清楚自己在做什么,否則永遠不要使用 >= > < <= 去比較一個可能為 null/undefined 的變量。對于取值可能是 null/undefined 的變量,請按需要分別檢查它的取值情況。

          總結

          • 比較運算符始終返回布爾值。
          • 字符串的比較,會按照“詞典”順序逐字符地比較大小。
          • 當對不同類型的值進行比較時,它們會先被轉化為數字(不包括嚴格相等檢查)再進行比較。
          • 在非嚴格相等 == 下,null 和 undefined 相等且各自不等于任何其他的值。
          • 在使用 > 或 < 進行比較時,需要注意變量可能為 null/undefined 的情況。比較好的方法是單獨檢查變量是否等于 null/undefined。

          任務

          值的比較

          重要程度: 5

          以下表達式的執行結果是?

          5 > 4
          "apple" > "pineapple"
          "2" > "12"
          undefined == null
          undefined === null
          null == "\n0\n"
          null === +"\n0\n"

          解決方案

          5 > 4 → true
          "apple" > "pineapple" → false
          "2" > "12" → true
          undefined == null → true
          undefined === null → false
          null == "\n0\n" → false
          null === +"\n0\n" → false

          結果的原因:

          1. 數字間比較大小,顯然得 true。
          2. 按詞典順序比較,得 false。"a" 比 "p" 小。
          3. 與第 2 題同理,首位字符 "2" 大于 "1"。
          4. null 只與 undefined 互等。
          5. 嚴格相等模式下,類型不同得 false。
          6. 與第 4 題同理,null 只與 undefined 相等。
          7. 不同類型嚴格不相等。

          冠肺炎疫情還在持續。

          而近期,國內各個省市預計又將面臨大規模返工潮。不少人要從老家回到工作的城市,開啟合租生活。

          不少人擔心:最近山東、湖南等地都爆發聚集性疫情,合租房的個人防護要怎么做?在公共區域如何避免交叉感染?

          今天,丁香醫生貼心地為大家準備了合租房個人防護指南。文章在手,安全我有!

          1. 與房東(業主)確認返回時間、提前了解室友情況

          拿小本本記好:這件事情很重要!

          兩件事:

          第一:和房東(業主)聯系,主動報備身體健康情況,與房東(業主)溝通確定返回時間。疫情當前,不少社區會下發應對疫情通知。根據通知內容,決定返程時間。

          可別到了小區進不了門,就尷尬了。

          第二:確認合租室友的情況。

          • 身體狀況:確認室友是否有發熱、鼻塞等癥狀。如果有,不推薦返回居住地。

          • 接觸史:確認室友是否曾經有過疑似接觸史,是否處于隔離期。如果有,不推薦返回居住地。

          在信息交流的過程中,保持禮貌、友好的態度。若室友來自湖北省等疫情高發區,不要抱有歧視的態度。

          「我們防的是病毒,不是湖北人?!?/p>

          2. 與室友見面戴口罩

          在公共區域戴口罩。

          提前與室友溝通,在廚房、陽臺、客廳等公共區域,雙方可戴口罩,以最低程度降低感染風險。

          減少與室友的接觸,如果有事情需要當面講,可以與對方保持 1 米的距離。

          3. 外出回來后做好個人清潔

          將外穿的鞋子放在門外,清理使用過的口罩,然后洗手,最后消毒隨身小物件。

          如果口罩變潮濕或者被分泌物玷污,必須立即換掉,將廢棄的口罩丟入垃圾桶;

          如果口罩完好無損且沒有去過人流密集區,可以掛晾在干凈、通風的地方,或存放在清潔透氣的紙袋里即可(紙袋方便打孔透氣)。

          圖片來源:首都醫科大學附屬北京胸科醫院 李亮、杜建醫生

          千萬要記得洗手哦!

          圖片來源:世界衛生組織

          如果要清洗身上的衣服,使用洗衣液或洗衣粉就好,不用做特別的消毒處理。

          至于手機、鑰匙等小物件,可以先用濕紙巾、消毒濕巾或者酒精棉片擦拭消毒就好。

          疫情期間,可以選擇一件常穿的外衣出門,回家直接脫掉掛起來,減少污染。

          4. 記得要常通風

          一天通風兩次,每次 30 分鐘。

          半個月沒人住的房間,當然要開開窗透透氣。通風可以增加空氣流動,達到空氣稀釋和空氣交換的作用,更新空氣,提高舒適度。

          有些合租房在公共區域只有狹長的走廊,這時候可以提前和室友溝通,約定好時間打開大門和窗戶,讓新鮮空氣進入房間。

          5. 使用公共洗衣機,不會感染病毒

          很多人擔心,使用合租房里的公共洗衣機洗衣服會感染病毒嗎?

          沒必要驚慌。清洗和晾曬(干燥)后,病毒會很難存活。

          有條件的,可以把洗衣機的水溫設定為 60~90 攝氏度,然后自然晾干或者高溫烘干。

          圖片來源:站酷海洛

          沒條件的也別擔心,從洗衣機撈出衣服后,把衣服、被子放在陽光中曬曬,陽光雖然不能殺死病毒,但會讓病毒存活的時間更短、更脆弱。

          此外,衣物干燥后,病毒也難以存活。

          當然,使用公共洗衣機結束后,記得洗洗手。

          6. 和室友的私人物品盡量分開放、別誤用他人牙刷、毛巾

          如果可以,把私人衛生物品放在自己房間或固定位置,隨用隨取。如果只能放在公共區,盡量隔遠點,使用時注意別拿錯。

          誤用他人的衛生用品,可能造成不必要的交叉感染。

          牙刷上有許多口腔里附著的細菌,毛巾也可能含有黃色葡萄球菌、白色念球菌、大腸桿菌等細菌,誤用室友的牙刷、毛巾可能感染疾病,產生不必要的風險。

          另外,再教大家一招正確放置牙刷和毛巾的辦法:

          • 牙刷:刷牙后,用清水把牙刷上殘留的牙膏、食物碎屑沖干凈,甩干,刷牙頭朝上放置在干燥、通風的環境中;

          • 毛巾:搓洗干凈,展開晾著。每三個月更換一條毛巾。

          同時,可以在洗漱臺上換上洗手液,勤洗手。

          7. 勤洗手是關鍵,公用區域和物品,必要時可消毒

          一般情況,房間不需要常規消毒,只要回家立即洗手,就不必擔心把病毒帶回家。

          如果合租房人多且雜,自己實在不放心,可以進行一些簡單的消毒。

          一般來說有幾個地方需要重點消毒:大門(主門)內側門把手以及門邊、手機和鑰匙、其他門把手、門面、開關按鈕、電腦鍵盤、鼠標、地面、廚房臺面、洗手間、家具。

          • 大門(主門)內側門把手以及門邊:用消毒濕巾或酒精棉片擦拭去污,按由內到外的順序進行擦拭消毒。

          • 手機、鑰匙、開關按鈕、其他門把手門面、電腦鍵、鼠標:用消毒濕巾或酒精棉片擦拭消毒,注意起火風險。

          • 地面、廚房臺面:噴灑并擦拭次氯酸鈉消毒劑;關門關窗 30 分鐘;再自然通風。

          • 洗手間(馬桶蓋、馬桶圈、沖水按鈕、洗手臺以及水龍頭):用消毒濕巾或酒精棉片擦拭消毒或使用次氯酸鈉消毒劑。

          • 家具(書桌面、化妝臺、床頭柜):噴灑并擦拭次氯酸鈉消毒劑;關門關窗 30 分鐘;自然通風。

          在配置次氯酸鈉消毒劑時可以參考以下步驟:

          • 在通風的環境下使用;

          • 使用前佩戴醫用手套 / 廚房手套以及防護面屏 / 防噴濺護目鏡;

          • 有效氯含量為 500mg/L 消毒效果最好,具體配置可參考商家說明;

          • 裝入噴霧瓶中;

          • 使用完畢后應將噴霧瓶洗凈;

          • 不可與其他清潔劑同時使用;

          • 使用期間人要離開。

          一些房東(業主)也可提供上門清潔服務,如果有條件,可以直接聯系,讓專業人士對房屋進行消毒處理。

          8. 使用公共衛生間盡量不要帶手機

          手被污染后再摸手機,雖然洗了手,但手機也「臟」了。

          即便不傳播新冠病毒,別的病毒和細菌也可以傳播,養成好的衛生習慣很重要。

          如果合租房人比較多,可以考慮公共衛生間廁所使用前后都盡量消毒。

          使用公共坐便的時候,沖糞便時蓋上蓋子,定期消毒清洗馬桶。擦完屁屁的紙可以直接扔進馬桶里用水沖走,不需要丟在垃圾桶里。

          圖片來源:站酷海洛

          記住不要隨地吐痰,更不要用腳去踩碾地面上的痰。

          9. 食物煮熟后再吃

          這年才過完,很多商店還沒開始營業。這段時間,需要自己動手,豐衣足食。

          在疫情期間,關于吃要注意三點:不要接觸野生動物;不要現殺活禽;在正規地點購買的肉類和蛋類,煮熟之后,可以放心吃。

          10. 盡量少去人多的地方

          回去之后,免不了與朋友或戀人的見面、約會,畢竟很多人已經大半個月沒見到對象了。

          見面的時候,盡量避免去人員密集的的地方。如果要出門,記得戴口罩。

          最后最后,如果自己出現了疑似癥狀:

          • 佩戴好口罩及時去往指定發熱門診篩查和治療。

          • 及時告知社區與相關人員,保持信息雙向流通。

          在合租房里,室友之間的交流與溝通很重要。尤其是疫情當前,信息要及時同步。

          疫情當下,每個人都一起加油,等待春暖花開的那一天。

          本文經由 第三軍醫大學呼吸學碩士 蔣永源、上海市公共衛生臨床中心醫師 林逸驍審核

          — 參考文獻 —

          [1]世界衛生組織對公眾的建議 https://www.who.int/zh/emergencies/diseases/novel-coronavirus-2019/advice-for-public

          [2]在線等!室友要從疫區回來了,慌的一批,我該怎么辦https://mp.weixin.qq.com/s/tUuvw_z96jxnnnda_7EsPg

          [3]家里最臟的地方竟然不是衛生間,而是這里……https://dxy.com/column/9656

          [4]WHO, Infection prevention andcontrol during health care when novel coronavirus (nCoV) infection issuspected, 2020-01-25

          [5]Version:0.9StartHTML:0000000105EndHTML:0000000512StartFragment:0000000141EndFragment:0000000472 衛生保健中易發生流行及大流行的急性呼吸道疾病感染預防與控制 世衛組織臨時指南

          策劃 Ant、奧利寶

          責編feidi

          封面圖來源站酷海洛

          外媒8月20日報道,一名名來自英國達勒姆郡達爾頓-勒代爾的21歲男子,在夢游時非禮了好朋友的女友,但是因為他當時處于睡眠狀態,目前陪審團已經達成一致,裁定其無罪。

          凱利(右)離開法庭

          事情發生在2017年4月17日,英國男子戴爾·凱利和他的好友以及這位哥們兒的女朋友去了夜店,之后乘坐出租車回到了朋友的家中。

          疲憊的他們回到家中,就立即上床睡覺了。凱利在睡夢中走進了這對情侶的臥室,并躺在了他們的床上,還親密地觸摸了哥們兒的女朋友。

          大約一個小時后,女方醒來,發現凱利躺在他們的床上。她認為凱利非禮了她,并報了警。凱利說,他當時正在做夢,以為自己在和一個女人約會。

          事發后,凱利離開了他們的家,過了一會兒,他給朋友發了一條信息,上面寫著:“我發誓,現在我真的不知道究竟發生了什么,那些都發生在睡夢中,我也想醒來?!?/p>

          約克郡刑事法庭

          被捕后,凱利接受了相關測試。經過測試,他的確存在睡眠障礙,包括夢游。

          原來凱利從小就患有異睡癥。專家表示,他很可能在侵犯女方時正處于夢游的狀態,盡管他們也不能百分百確定當時是否就是這樣。

          凱利的辯護律師埃莉諾·弗萊表示,他的當事人無法說出那天早上究竟發生了什么,因為他當時正在睡覺。

          盡管艱難的商議,但陪審團最后還是裁定,凱利存在相關睡眠障礙疾病,需要進行治療,由于他當時處于睡著的狀態,罪名不應該成立。

          盡管陪審團已經作出了結論,但本案的主審法官西蒙·希奇稱這是一個“不尋?!钡陌讣硎咀罱K的判決還要看一下醫院和檢查的結果。

          經過兩個多小時的庭審,約克郡刑事法庭決定對最終的判決進行推遲,將再請專家進一步弄清此案中存在的一些“疑惑”。

          醫生認為,凱利的“精神障礙”可以得到治療。

          目前凱利已獲準保釋,此案件將于9月23日再次開庭,屆時法官將有最終的判決。

          (登登)

          硬漢男星被曝出軌后又拒降8750萬片酬?來“中國網”(CIIC_China)官方微信,搜更多猛料


          主站蜘蛛池模板: 精品国产精品久久一区免费式| 无码日韩精品一区二区免费| 亚洲AV无码一区二区一二区| 亚洲一区二区三区高清在线观看| 一区二区三区四区免费视频| 免费播放一区二区三区| 日本丰满少妇一区二区三区| 亚洲一区二区三区偷拍女厕| 亚洲色偷偷偷网站色偷一区| 国产萌白酱在线一区二区| 国产精品自在拍一区二区不卡| 国精品无码一区二区三区在线蜜臀| 亚洲一区精彩视频| 国产成人无码一区二区三区在线| 日韩中文字幕精品免费一区| 高清一区二区三区| 日本无卡码免费一区二区三区| 久久亚洲日韩精品一区二区三区| 久久久精品日本一区二区三区| 少妇激情AV一区二区三区| 久久精品国产免费一区| 波多野结衣一区二区免费视频| 中文字幕一区在线观看视频| 久久亚洲AV午夜福利精品一区| 无码AV一区二区三区无码| 国产一区中文字幕在线观看| 亚洲.国产.欧美一区二区三区 | 国产精品视频分类一区| 精品久久一区二区| 国产成人无码一区二区三区| 一区二区三区国产| 亚洲综合无码一区二区| 日韩精品一区二区三区中文| 亚洲av无码一区二区三区不卡| 日本一区二区免费看| 91在线视频一区| 日本一区二区三区在线看 | 无码av免费一区二区三区试看 | 精品国产日产一区二区三区| 日韩电影一区二区| 亚洲午夜精品一区二区公牛电影院|