オプションの連鎖演算子 (?.) および null 合体演算子 (??)

友人から偶然見かけたので百度を見てみましたが、百度のやり方が間違っていたのか見れませんでした、後から知ったらなかなか面白かったです、一つずつお話していきます

オプションの連鎖演算子 (?.)

公式の定義

オプションのチェーン演算子 ( ?. ) を使用すると、チェーン内の各参照が有効であることを明示的に検証することなく、接続されたオブジェクトのチェーンの奥深くにあるプロパティの値を読み取ることができます。?. 演算子の機能は .chain 演算子に似ています。違いは、参照がヌル (null または未定義) の場合でもエラーが発生しないことです。この式の短絡戻り値は unknownです関数呼び出しで使用した場合、指定された関数が存在しない場合は、unknown を返します。

使用法

公式ドキュメントで最もよく目にするのは、コードが簡略化され、エラーがスローされないことです。上記は少し無理が​​あるかもしれませんが、簡単なバージョンを次に示します

  var obj = {
    
    
                name: 'mk',
                age: '12',
                adress: {
    
    
                    pro: 'hubei',
                    city: 'wuhan',
                }
            }
            // 我们正常写的话,为了避免报错需要先判断有没有obj,
        var lily = obj.adress && obj.adress.as; //'underfined'
        var ll = obj.adress && obj.adress.city; //'wuhan'

        //有了可选链操作符(?.),不需要先确定
        var mm = obj.adress ?.as; //'underfined'
        var ss = obj.adress ?.city; //'wuhan'
        // 等价于
        var tt = obj.adress;
        var ss = (tt == null || tt.city == null) ? 'underfined' : tt.city

同じことが関数にも当てはまります
** 属性名があり、それが関数ではない場合は、? を使用してください。それでも TypeError 例外が生成されます (xy は関数ではありません)。** 公式 Web サイトでこれを見ましたが、
まだエラーが出力されましたが、その理由はわかりません。someInterface
自体が null または未定義の場合でも、例外 TypeError がスローされます。 someInterface is null someInterface も null または未定義であることを許可したい場合は、someInterface? を記述する必要があります。このようにcustomMethod?.()

let result = someInterface.customMethod?.(); //这一条报错
let result=someInterface?.customMethod?.(); //这一行在谷歌中依然报错

公式ドキュメントによると、someInterface の後に ? を追加すると定義されていない場合でもエラーは報告されませんが、someInterface が定義されていないとエラーを報告しました

知らせ

割り当てには使用できません

let object = {
    
    };
object?.property = 1; // Uncaught SyntaxError: Invalid left-hand side in assignment(赋值时左边无效,本来有值的情况下也抛这个错误)

NULL 値合体演算子 (??)

意味

NULL 値合体演算子 (??) は、左側のオペランドが null または未定義の場合に右側のオペランドを返し、それ以外の場合は左側のオペランドを返す論理演算子です。

使用

or (||) とは異なります。 or (||) の場合はブール型の値で判断されます。0、'' などの場合は自動的に false と判断されますが、* null の場合は値マージ演算子 (? ?) null null または未定義にのみ反応し、デフォルト値として使用できます。

var a = '';
var b = null;
var c=a ?? '12'; //''
var d=b ?? '15';// 15
var e=a||'12'; //12
var f=b||'15'; //15

もちろん、この 2 つを組み合わせてデフォルト値を指定することもでき、右側がアンダーファインまたは null の場合は、?? の後のデフォルト値が返されます。

エンディング

公式ウェブサイトのアドレスはここに添付されています。あなた自身で見てください。結局のところ、長兄は依然として長兄です。
オプションのチェーン演算子。Null
値の結合演算子。

おすすめ

転載: blog.csdn.net/Yannnnnm/article/details/118578654