[英]What is the point of using double logical not "!!" operator in javascript
我經常看到一些這樣的代碼:
const a = !!b && b.c === true;
我想這個想法是沒有一個變量可以為空,但在這種情況下,這段代碼有什么區別:
const a = b?.c === true
兩者之間有根本區別嗎?
這更像是一個 javascript 方面的問題......
&&
運算符返回第一個假值,因此0
、 ''
、 undefined
、 NaN
或null
將是const a
的值。 如果你想要一個布爾值,那么!!
語法是確保它是布爾值的最常用方法
如果我在這方面沒有完全錯,可選鏈接( ?.
)只會停止對 undefined 或 null 值的執行並返回 undefined
如果情況是b
,如果它存在(不是 undefined 或 null),將是一個對象,那么不,這兩者之間沒有區別。
您可能會看到someVar && someVar.someProp
(或!!someVar && someVar.someProp
)和變體的最大原因是可選鏈是非常新的語法。 它只會存在於最近更新的代碼庫中(運行 TS 3.7 或更高版本)。
但是如果一個變量可能是假的,但不一定是一個對象——例如,如果它是 0、NaN、假或空字符串,那么這些構造是不等價的。 與?.
可選鏈接?.
僅當表達式在?.
的左側時才會短路到undefined
?.
為null
或undefined
。 其他 falsey 值將繼續正常評估其屬性。
這兩個表達式具有相同的結果。
關鍵的區別是:兼容性
在純 javascript 中, ?.
運算符真的是最近的:請參閱 MDN 上的瀏覽器兼容性圖表,
例如,我當前的瀏覽器(今天是 2020 年 3 月 11 日,我的 linux 系統運行的是 Firefox 73)不支持b?.c
語法。
b?.c === true
版本在 ES2020 之前根本無法編寫,如果他沒有更新到最近的版本,則無法在您客戶的瀏覽器上正常工作 - 直到今天:“最近”將意味着“流血邊緣” “……
正如@jonrsharpe 在他的評論中提到的, ?.
運算符也可通過轉譯語言(打字稿、coffeescript、babel ...)獲得,支持各種日期。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.