簡體   English   中英

使用雙邏輯而不是“!!”有什么意義 JavaScript 中的運算符

[英]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''undefinedNaNnull將是const a的值。 如果你想要一個布爾值,那么!! 語法是確保它是布爾值的最常用方法

如果我在這方面沒有完全錯,可選鏈接( ?. )只會停止對 undefined 或 null 值的執行並返回 undefined

如果情況是b ,如果它存在(不是 undefined 或 null),將是一個對象,那么不,這兩者之間沒有區別。

您可能會看到someVar && someVar.someProp (或!!someVar && someVar.someProp )和變體的最大原因是可選鏈是非常新的語法。 它只會存在於最近更新的代碼庫中(運行 TS 3.7 或更高版本)。

但是如果一個變量可能是假的,但不一定是一個對象——例如,如果它是 0、NaN、假或空字符串,那么這些構造是等價的。 ?.可選鏈接?. 當表達式在?.的左側時才會短路到undefined ?. nullundefined 其他 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM