オプションの連鎖演算子 ?. および null 代入演算子 ??

オプションのチェーン演算子?. と null 代入演算子?? は、ES2020 で導入された新機能です。それらの機能は次のとおりです。

オプションのチェーン演算子?. :- オプションでオブジェクトの深いプロパティを読み取るために使用されます。中間のプロパティが存在しない場合は、エラーを報告せずに未定義を返します。

例えば:

let name = obj.name;        // 如果 obj 不存在,这里会报错
let name = obj?.name;       // 如果 obj 不存在,返回 undefined

- オブジェクトのプロパティの読み取り、メソッドの呼び出し、配列要素へのアクセスなどに使用できます。

例えば:

let age = person?.['age'];
let func = obj?.someMethod?.();
let first = arr?.[0]; 

Null 代入演算子?? :

- ターゲット値が空 (null または未定義) の場合にデフォルト値を提供するために使用されます。

例えば:

let name = obj.name ?? 'default'; 
// 等同于:
let name = obj.name || 'default';
// 但是 ?? 有另一个功能:如果obj.name为假值(如0)时,不会取'default'

- ターゲット値が null または未定義の場合にのみデフォルト値が採用され、値が false (0 または '' など) の場合はデフォルト値は採用されません。

したがって、?? は || よりも厳密です。

例えば:

let age = 0 ?? 18;   // age 为 0
let age = '' ?? 18;  // age 为 ''
let age = null ?? 18; // age 为 18

要約:

オプションの連鎖演算子?。これは、オプションでオブジェクトの深いプロパティを読み取るために使用され、中間プロパティが存在しない場合は unknown を返します。
null 代入演算子 ?? は、ターゲット値が null (null/未定義) の場合にデフォルト値を提供するために使用されます。
オプションの連鎖演算子はセキュリティの考慮事項に基づいており、null 代入演算子は厳密性の考慮事項に基づいています。
どちらも ES2020 の新機能で、オブジェクトのプロパティの読み取りとデフォルト値の処理がより簡潔かつ効率的に行われます。

おすすめ

転載: blog.csdn.net/qwe0415/article/details/131432263