avaScript是一種非常容錯的編程語言,許多在其他編程語言中不合法的表達式在JavaScript中都能正常工作。
這導致了很多奇怪的代碼。你想挑戰它嗎?
在這個挑戰中,你將看到20個古怪表達式,并要猜出其輸出結果。
1.
true + false
2.
**1.**
3.
[1, 2, 3] + [4, 5, 6]
4.
0.2 + 0.1===0.3
5.
10,2
6.
!!""
7.
+!![]
8.
true=="true"
9.
010 - 03
10.
"" - - ""
11.
null + 0
12.
0/0
13.
1/0===10 ** 1000
14.
true++
15.
"" - 1
16.
(null - 1) - "1"
17.
38 * 4343 * 2342+ (“true” — 0)
18.
5 + !5 + !!5
19.
[] + [1] + 2
20.
1 + 2 + "3"
true + false
試圖在兩個布爾值之間使用加法運算符(+)時,它們會被轉換為數字。
而且我們都知道true應該被轉換為1,false應該被轉換為0。所以true+false返回1。
[,,,].length
[,,,] 輸出一個有三個空槽的數組。最后一個逗號是尾部的逗號。
你可以這么想。
[,]==> [empty,]
[,,]==> [empty, empty,]
[,,,]==> [empty, empty, empty,]
所以 [,,,].length 返回3。
[1, 2, 3] + [4, 5, 6]
當你試圖在數組之間使用加法運算符(+)時,它們會被轉換為字符串。
將一個數組轉換為字符串時,數組的 toString() 方法被調用。toString()方法是JavaScript 內部使用的,當一個數組需要顯示為文本時,它將用逗號連接其元素。
[1, 2, 3].toString()==> '1, 2, 3'
[4, 5, 6].toString()==> '4, 5, 6'
所以
[1, 2, 3] + [4, 5, 6]==> '1, 2, 3' + '4, 5, 6'==> "1,2,34,5,6"
0.2 + 0.1===0.3
由于浮點數很難在計算機中準確表示,數學上的0.1和0.2在計算機中只能用近似的數字表示。
0.1+0.2的結果不完全是0.3。不僅僅是JavaScript,其他編程語言也有同樣的問題。
10, 2
逗號(,)在JavaScript中也是一個合法的操作符,它評估每個操作數(從左到右),并返回最后一個操作數的值。
因此,10,2返回2
!!""
""是一個空字符串,它是一個虛值。
注意:0、空字符串""、null 和undefined都是虛值。
! 是邏輯上的 "非 "運算符,把 true 變成 false,反之亦然。
如果我們使用兩次!,也就是!!,它將把一個正常的值轉換成一個布爾值。所以!""返回 false。
+!![]
數組都是真值,甚至是空數組。所以!![]將返回true。
!![]; // -> true
而+號會將真值轉換為其數字表示: 1,所以 +!![] 返回 1。
true=="true"
雙等運算符(==)檢查其兩個操作數是否相等,并返回一個布爾值結果。
根據抽象的雙等比較規則,這兩個值在比較時都被轉換為數字。
true=="true"==> Number(true)==Number("true")==> 1==NaN
所以,ture=="true" 返回false。
010 - 03
這里有一個小小的技巧:如果一個數字以0開頭,那么在JavaScript中它就被當作一個八進制數字。所以:
010 - 03==> 8 - 3==> 5
另外:
** ""--"" **
這看起來是一個錯誤的語法,但它確實工作正常。
空字符串可以被轉換為布爾值false或數字值0。所以 -"" 為 0
null + 0
正如我們之前所說,null是一個虛值。它將被轉換為布爾值false或數字值0。所以結果返回 0。
0/0
這是一個非法的數學表達式。方程0/0沒有任何有意義的數字答案,輸出的結果只是NaN。
1/0===10 ** 1000
雖然1/0和之前一樣也是一個非法的數學表達式。但是當除數不是0時,JavaScript認為這個表達式的結果是Infinity。
而10**1000是一個很大數字,JS 無法正確表示這個數字。(JavaScript中最高的整數值是2^53-1)。所以10 * 1000也被當作無限大(Infinity)。
無窮大總是等于另一個無窮大,所以1/0===10 ** 1000返回 true。
true++
這沒有什么特別的,這只是一個語法錯誤。
""- 1
雖然加法運算符(+)同時用于數字和字符串,但減法運算符(-)對字符串沒有用處,所以JavaScript將其解釋為數字之間的操作。一個空的字符串會被類型強制為0。
"" - 1==> Number("") - 1==> 0 - 1==> -1
所以 "" — 1 返回 -1
** (null - 1) - "1" **
正如上面所說。
null==> 0
(null - 1)==> -1
"1"==> 1
所以 (null — 1) — “1” 返回 -2
38 * 4343 * 2342+ ("true" - 0)
你可能會懷疑JS是如此瘋狂,以至于它將字符串 "true" 轉換為布爾值 true 的數字表示。然而,它并沒有那么瘋狂。實際發生的情況是,它試圖將字符串轉換為數字,但失敗了。
Number("true"); // -> NaN
在JavaScript的數字運算中,只要有一個值是NaN,運算的最終結果就一定是NaN。38 * 4343 * 2342只是一個煙霧彈。
5 + !5 + !!5
正如上面所說。
所以:
!5==> 0
!!5==> 1
**[] + [1] + 2 **
試圖在數組之間使用加法運算符(+)時,它們會被轉換為字符串。
[]==> ''
[1]==> '1'
[] + [1]==> '1'
'1' + 2==> '12'
所以結果是'12'。
1 + 2 + "3"
JavaScript 從左到右執行這些操作。當數字3與字符串3相加時,字符串連接將優先進行。
1 + 2; // -> 3
3 + "3"; // -> "33"
坦率地說,這些挑戰并沒有為我膠們編碼技能提供任何價值,所以不應該在實際項目中寫這種代碼
但是,把這些技巧作為朋友和同事之間的一些裝13,不是一件非常有趣的事情嗎?
作者:Marina Mosti 譯者:前端小智 來源:medium 原文:https://medium.com/frontend-canteen/20-useless-but-funny-challange-for-javascript-develor-9eea39bb8efb
云與華盛頓州奧卡諾根-韋納奇國家森林美洲獅溪野火產生的煙霧混合在了一起。
野火和熱浪對美國西部造成的壓力持續攀升,人們對干旱的憂慮也與日俱增:干燥的土地更容易釀成火事,而雨水能夠幫助平息肆虐的大火。然而,野火的煙霧也可能成為降雨的阻礙。phys.org網站當地時間8月11日報道,美國西北研究協會與科羅拉多大學博爾德分校領導的研究顯示,野火煙霧中的微小顆粒會影響云滴的形成方式,造成降雨減少,并加劇助長火災的干燥條件。研究人員預測說,受野火影響,云層中形成的液滴數量會增加,但煙霧云和潔凈云之間的差異比預期更大——煙霧云中的液滴數量是潔凈云的5倍,但其液滴尺寸僅為原始液滴尺寸的一半。由于小液滴不太可能繼續增長并最終形成降雨,美國西部的降雨很可能因野火季而減少。相關研究成果刊登在《地球物理研究快報》中。
大氣科學家Cynthia Twohy說:“我們對這些有機粒子在云滴形成過程中的作用感到驚訝。我開始思考,‘這會產生怎樣的長期影響?野火和干旱隨著時間的推移還在繼續增加,云在這里扮演了什么角色?’”
在高至大氣的云層中,更多的微粒會增強云層活躍度,從而導致降雨。但對于Twohy團隊研究的相對低海拔的積云而言,情況正好相反。研究人員在亞馬遜地區發現的與煙霧相關的液滴尺寸和濃度的類似變化,為新發現提供了支持。專業人士、加州大學歐文分校大氣化學家Ann Marie Carlton說:“Twohy團隊的新發現真正讓我興奮的是,它揭示了煙霧與水循環的聯系。”
Twohy指出,云層的微觀物理學過程是非常復雜的。新研究的重點是小型積云,它們在夏季覆蓋了美國西部大約四分之一的地區,而其他類型的云(如高空雷暴云)可能會有不同的表現。在較淺的云層中,數量越多、尺寸越小的液滴,反射性也越強,這可能會對地表起到輕微的冷卻作用。隨著這些地區夏季降雨的減少,干燥效應正在壓過可能增加降雨的因素。Carlton總結道:“人類擾亂了大氣的組成。這導致產生了很多未知的反饋和相互作用。Twohy的論文觸及了疑云的表面。”
編譯:德克斯特 審稿:西莫 責編:陳之涵
期刊來源:《地球物理研究快報》
期刊編號:0094-8276
原文鏈接:https://phys.org/news/2021-08-wildfire-western.html
中文內容僅供參考,一切內容以英文原版為準。轉載請注明來源。
防關系到公共安全和社會穩定問題,是一道重要的防線。隨著社會現代化程度不斷加深,火災也呈現出復雜化的趨勢。單一傳統的有線傳輸信號的火災報警方式已經不能滿足現代消防的需求。而有線布線的方式繁瑣,并且在火災現場中極易被破壞。
我們緊跟現代技術發展,在【方案超市】中精心挑選出4個可用于家庭、社區或者工業領域的預防火災的智慧解決方案,讓智慧消防走進千家萬戶。
如有需要,請點擊查看方案詳情鏈接,可獲取方案商的聯系方式,進行咨詢。
一、NB-Iot煙感報警器(工業區)
NB-Iot煙感具有秒級的火情識別反應速度,并直接推送到消防大屏火控中心。產品無需經過傳統火情的類似架構,多級聯網,層層上傳。只需黏貼或者扣住卡扣,可免除傳統煙感多級布線、調試等繁瑣過程。查看方案詳情》http://www.52solution.com/shop/7208.html
二、工廠可燃有毒性氣體監控系統(工業區)
當工業環境、日常生活環境中可燃性氣體發生泄漏時,有毒可燃氣體報警器檢測到可燃性氣體濃度達到報警器設置的報警值時,可燃氣體報警器會發出聲光報警信號,以提醒工作人員疏散、強制排風、關停設備等安全措施。且氣體報警器可聯動相關的聯動設備如在工廠生產、儲運中發生泄漏,可以驅動排風、切斷設備電源、噴淋等系統,防止發生爆炸、火災、中毒事故,從而保證安全生產,此方案經常用在化工廠、石油、燃氣站、鋼鐵廠等使用或者產出可燃性氣體的場所。查看方案詳情》http://www.52solution.com/shop/7374.html
三、智能氣體感應器(家居、工業區)
安S2智能氣體感應器(以下簡稱氣體感應器)是一款基于家庭安防而設計的互聯網報警器。內置MacBee模組,采用MacBee協議與智能主機進行高可靠安全射頻通信。悟安S2智能氣體感應器包含一氧化碳檢測、可燃氣體檢測等多種感應器,支持檢測室內CO、甲醛、甲烷等氣體的濃度,預防燃氣泄漏和有害氣體釋放造成的危害。當氣體感應器探測到待測氣體并達到氣體感應器設定的報警濃度時,氣體感應器LED閃爍,并發出報警聲音,同時將信息反饋至APP客戶端,推送報警消息提醒。全自動檢測功能,確保氣體感應器始終處于最佳的工作狀態,可通過APP客戶端查詢歷史記錄,讓您時刻把家的安全帶在身邊。查看方案詳情》http://www.52solution.com/shop/7321.html
四、煙霧探測無線報警器(住宅、商場、倉庫)
煙霧探測無線報警器能夠探測火災發生時產生的煙霧并及時發出報警信號。該探測器利用煙霧中的顆粒折射紅外光的原理來進行工作,產品采用獨特的結構設計以及光電信號處理技術,具有防塵、防蟲、抗外界光線干擾等功能,從設計上保證了產品的穩定性。本產品對緩慢陰燃或者明燃所產生的可見煙霧,都有較好的反應。適用于住宅、商場、賓館以及倉庫等室內環境的煙霧監測。查看方案詳情》http://www.52solution.com/shop/6942.html
*請認真填寫需求信息,我們會在24小時內與您取得聯系。