們知道,在數學中有很多用于比較大小的運算符。
在 JavaScript 中,它們的編寫方式如下:
在本文中,我們將進一步了解不同類型的比較,JavaScript 是如何進行比較的,包括一些重要的特殊性。
在文末給出了一些秘訣,幫助你避免 “JavaScript 陷阱”相關的問題。
所有比較運算符均返回布爾值:
示例:
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
字符串的比較算法非常簡單:
在上面的第一個例子中,'Z' > 'A' 比較在算法的第 1 步就得到了結果。
在第二個例子中,字符串 Glow 與 Glee 的比較則需要更多步驟,因為需要逐個字符進行比較:
非真正的字典順序,而是 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
一個有趣的現象
有時候,以下兩種情況會同時發生:
例如:
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 與其他值進行比較時,其返回結果常常出乎你的意料。
當使用嚴格相等 === 比較二者時
它們不相等,因為它們屬于不同的類型。
alert( null === undefined ); // false
當使用非嚴格相等 == 比較二者時
JavaScript 存在一個特殊的規則,會判定它們相等。它們倆就像“一對戀人”,僅僅等于對方而不等于其他任何的值(只在非嚴格相等下成立)。
alert( null == undefined ); // true
當使用數學式或其他比較方法 < > <= >= 時:
null/undefined 會被轉化為數字:null 被轉化為 0,undefined 被轉化為 NaN。
下面讓我們看看,這些規則會帶來什么有趣的現象。同時更重要的是,我們需要從中學會如何遠離這些特性帶來的“陷阱”。
通過比較 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 不應該被與其他值進行比較:
alert( undefined > 0 ); // false (1)
alert( undefined < 0 ); // false (2)
alert( undefined == 0 ); // false (3)
為何它看起來如此厭惡 0?返回值都是 false!
原因如下:
我們為何要研究上述示例?我們需要時刻記得這些古怪的規則嗎?不,其實不需要。雖然隨著代碼寫得越來越多,我們對這些規則也都會爛熟于胸,但是我們需要更為可靠的方法來避免潛在的問題:
重要程度: 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. 與房東(業主)確認返回時間、提前了解室友情況
拿小本本記好:這件事情很重要!
兩件事:
第一:和房東(業主)聯系,主動報備身體健康情況,與房東(業主)溝通確定返回時間。疫情當前,不少社區會下發應對疫情通知。根據通知內容,決定返程時間。
可別到了小區進不了門,就尷尬了。
第二:確認合租室友的情況。
身體狀況:確認室友是否有發熱、鼻塞等癥狀。如果有,不推薦返回居住地。
接觸史:確認室友是否曾經有過疑似接觸史,是否處于隔離期。如果有,不推薦返回居住地。
在信息交流的過程中,保持禮貌、友好的態度。若室友來自湖北省等疫情高發區,不要抱有歧視的態度。
「我們防的是病毒,不是湖北人?!?/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)官方微信,搜更多猛料
*請認真填寫需求信息,我們會在24小時內與您取得聯系。