亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

可選鏈接在 if 語句中使用時會導致意外結果

可選鏈接在 if 語句中使用時會導致意外結果

森欄 2022-10-21 10:49:44
我在代碼中有一個 if 語句,它檢查是否定義了一個對象,然后檢查它的一個屬性是否相等。我的 if 語句是這樣的:if(obj && obj.a !== x) { // do something }但是現在我使用了可選鏈接并將我的 if 語句更改為:if(obj?.a !== x) { // do something }但是現在我的代碼在這種情況下無法正常工作。即使 obj 未定義,代碼也會進入 if 語句。請有人解釋為什么會這樣?
查看完整描述

1 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

但是現在我的代碼在這種情況下無法正常工作。即使 obj 未定義,代碼也會進入 if 語句。

這主要是因為運算符的優先級。可選 channing (?.)比 And (&&)運算符和嚴格不等式運算符(!==)具有更高的優先級。

讓我解釋一下這兩種情況:

Case 1: if(obj && obj.a !== x) { // do something }

在這里,&&的優先級低于!==。所以這個比較可以等價于或寫成:

if(obj && (obj.a !== x)){// do something}

在這里,如果 obj 為 falsy 或 nullish,則永遠不會執行條件。

Case 2: if(obj?.a !== x) { // do something }

在這里,?。優先級高于!==。所以這是比較可能相當于:

if((obj && obj.a) !== x) { // do something }

所以在這種情況下,如果 obj 為空,我們將始終在 if 語句中輸入,直到 x 不是未定義的。


查看完整回答
反對 回復 2022-10-21
  • 1 回答
  • 0 關注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號