簡體   English   中英

JavaScript 可選鏈接 (?.) 運算符如何工作?

[英]How does the JavaScript optional chaining(?.) operator works?

我正在研究新的 JS 可選鏈接?. 操作員。 它可以幫助我們避免出現這樣的錯誤,

TypeError: Cannot read property ‘x’ of undefined

你可以寫

const obj = {a: 1};
console.log(obj?.b);

沒有錯誤。 如果obj object 中沒有名為b的屬性,它將返回undefined 。現在,這適用於第一級 (.) 運算符。 但如果我嘗試這樣的事情,

console.log(obj.b.c.d?.e);

這是拋出錯誤,

Uncaught TypeError: obj.c is undefined // In firefox it throws obj.b is undefined.

但如果我寫,

console.log(obj.b?.c.d?.e);

它再次返回未定義。 它不應該返回Uncaught TypeError: obj.b.c is undefined嗎?

這是一些實施差距還是我在這里遺漏了什么? 提前致謝。

現在已經解決了。 @Ifaruki 的評論有適當的解釋。

更新:它被稱為“鏈接”運算符。 它從左向右移動。 如果它看到? 如果未定義,它會檢查左邊的值。 如果是,它返回 undefined 並停止向右移動。 這意味着如果 b 已經未定義,它不會檢查右側的值

它被稱為“鏈接”運算符。 它從左向右移動。 如果它看到?. 如果它是undefined ,它會檢查左邊的值。 如果是,則返回undefined並停止向右移動。 這意味着如果b已經undefined ,它不會檢查右側的值

在下面的示例中,obj 只有一個鍵 a。

const obj = {a: 1};
console.log(obj?.b);

在上面的代碼片段中,object 中沒有屬性 b,因為它正在打印undefined

console.log(obj.b.c.d?.e);
console.log(obj.b?.c.d?.e);

即使在上面的代碼中,同樣的事情也會發生在 object 沒有密鑰b的地方,因此它打印未定義。 因此,如果您想查看 obj.b.c 未定義,那么 object 應該如下所示:

obj: {
    b: '123'
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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