成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么在JavaScript中 [] == ![] 返回 TRUE?

開發 前端
把所有的責任都推給危險的 == 運算符。這只是我們總是告訴JavaScript新手永遠不要使用它(真的永遠不要)的又一個例子。尤其是如果他們之前一直在使用像C#這樣固執且嚴格的語言編程。

圖片圖片

這毫無道理。

一個數組怎么可能不是一個數組呢?

圖片圖片

[] 是真值,而 ![] 應該是 false。

那么 [] 怎么可能等于 false 呢?

而且這種情況似乎并不發生在其他類型上,比如字符串和數字:

圖片圖片

JavaScript的數組是不是壞了?

這里發生了什么

把所有的責任都推給危險的 == 運算符。

這只是我們總是告訴JavaScript新手永遠不要使用它(真的永遠不要)的又一個例子。

尤其是如果他們之前一直在使用像C#這樣固執且嚴格的語言編程。

乍一看,== 似乎沒有任何問題:

圖片圖片

圖片圖片

但現在看看這里發生了什么:

圖片圖片

但看看在JavaScript中發生了什么:

圖片圖片

JavaScript自動將字符串轉換成了數字!

這是人們對JavaScript的諸多不滿之一,這也是TypeScript出現的原因。

圖片圖片

那么你認為在 [] == ![] 的背后,真正發生了什么?

首先,在JavaScript中空數組是真值,所以 ! 作用于它使其變成 false

圖片圖片

我們突然發現自己在比較一個 數組 和一個 布爾值。顯然不會有好結果。

正如我們現在所知,JS并不在意,所以它就繼續進行 — 這次將 布爾值 轉換為等價的數字

圖片圖片

接下來,由于一些你永遠不需要知道的垃圾規則,[] 變成了...一個空字符串?

圖片圖片

最后它將 "" 轉換成...一個數字:

圖片圖片

那么,避免這種荒謬情況的解決方案是什么?

始終使用嚴格相等運算符 ===。

圖片圖片

沒有任何可以想象的場景是 == 可以使用而 === 不能使用的

現在使用 ===,VS Code編輯器突然活躍起來,阻止我們做類似這樣的事情:

圖片圖片

但之前它是沉睡的:

圖片圖片

但 [] == [] 呢?

好的,這說得通,但那么什么可以解釋這個:

圖片圖片

肯定不能怪 == 了。它們有相同的類型,不是嗎?

是的,它們確實有。

只是JavaScript通過引用比較數組。而不是通過值。

它們可能有完全相同的值,但只要它們不指向內存中的同一個對象,在 == 和 === 看來它們就永遠不會相等。

圖片圖片

對于對象來說一般也是這樣:

圖片圖片

當然,對于我們的核心原始值 — 字符串、數字和布爾值 — 情況并非如此

圖片圖片

那么,當你想按元素值比較數組時該怎么辦?

如果是已排序的,你可以使用 JSON.stringify():

圖片圖片

否則,你可以使用更通用的 length 和 every() 組合:

圖片圖片

最后的思考

== 只是JavaScript松散性導致它做出在現實世界中毫無意義的事情的一個例子。

道德教訓:始終使用嚴格相等,使用TypeScript,并優先使用現代特性。

責任編輯:武曉燕 來源: 大遷世界
相關推薦

2024-08-23 08:47:51

2024-08-23 09:14:18

2023-03-28 08:53:18

操作符數字字符串

2023-09-19 08:03:01

JavaScriptevery()

2022-12-22 14:32:37

JavaScript編程語言

2023-08-13 16:17:31

2016-12-22 18:38:49

JavaAndroid

2015-11-23 10:09:30

Java

2019-08-30 14:58:47

JavaScript程序員編程語言

2016-04-06 11:29:58

JavaScriptDOM操作

2022-09-14 09:37:17

JavaScript默認導出

2020-05-06 22:20:48

Kubernetes邊緣計算

2020-05-26 15:53:01

StraceDocker容器

2021-04-16 17:37:28

數據智能照明物聯網

2020-08-11 11:51:47

標準物聯網IOT

2023-11-08 13:32:00

JavaScript浮點數計算

2021-05-30 09:25:48

HttpETag 網絡協議

2023-09-20 00:06:30

Python代碼函數

2022-07-15 13:43:40

網絡安全黑客

2019-10-23 15:53:16

JavaScript可選鏈對象
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩一区精品 | 羞羞色网站| 久久av网 | 在线国产一区二区三区 | 日本三级在线视频 | 日韩在线一区二区三区 | 国产熟熟 | 欧美视频1| 国产欧美精品一区二区 | 亚洲视频中文字幕 | 亚洲毛片在线观看 | 国产精品国产精品国产专区不片 | 成人特级毛片 | 狠狠色综合久久丁香婷婷 | 日韩精品在线一区 | 国产亚洲一区二区三区 | 国产黑丝av | 国产一区二区精 | 古装人性做爰av网站 | 成人在线视频网站 | 久久久久国产一区二区三区四区 | 五月婷六月丁香 | 亚洲一区二区三区四区五区午夜 | 99欧美精品 | 欧美一级免费黄色片 | 亚洲一区二区三区在线观看免费 | 亚洲精品一区二区三区蜜桃久 | 成年人免费网站 | 亚洲视频免费 | 国产精品久久久久久久久久久久冷 | 国产精品一区二区视频 | com.色.www在线观看 | 羞羞视频在线免费 | 色噜噜狠狠色综合中国 | 欧美在线a | 久久久综合精品 | 国产一级在线视频 | 亚洲精品在线免费观看视频 | 久热m3u8 | 日本天天操 | 国产成人精品一区二区 |