![](/img/trans.png)
[英]Can Optional Chaining be alternative of 'in' operator in 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.