この表記法を使用して、オブジェクトが初期化されていることを確認する JavaScript があります。
MyObject = MyObject || {};
つまり、空のオブジェクトを に割り当てない場合、 MyObject が何かをチェックしますMyObject
。私は JS のすべての内部構造をよく知っているわけではないので、代入で論理比較をどのように使用できるかわかりません。
それはどのように機能しますか?これを許可する他の言語はありますか?
この表記法を使用して、オブジェクトが初期化されていることを確認する JavaScript があります。
MyObject = MyObject || {};
つまり、空のオブジェクトを に割り当てない場合、 MyObject が何かをチェックしますMyObject
。私は JS のすべての内部構造をよく知っているわけではないので、代入で論理比較をどのように使用できるかわかりません。
それはどのように機能しますか?これを許可する他の言語はありますか?
この構文は、「MyObject
定義されている場合はそれ自体に代入する。定義されていない場合は、空のオブジェクトを渡す」ことを意味します。
Javascript は未定義の値を false として扱い、定義済みの値を true として扱うため、機能します。これを論理式の遅延評価と組み合わせると、上記の動作が得られます。
言語によって異なります。
たとえば、Ruby では、このスタイルを使用できます。
しかし、PHP では、論理演算子は常にブール値 (true/false) を返すため、このスタイルを使用できませんでした。
結論:
論理演算子が常にブール値を返す場合、このスタイルは使用できません。
最初の値が true と評価されたときに論理演算子が最初の値を返す場合、それ以外の場合は 2 番目の値を返す場合、このスタイルを使用できます。
論理「or」演算子には短絡セマンティクスがあります。つまり、右側のオペランドは、左側のオペランドが として評価される場合にのみ評価されfalse
ます。したがって、MyObject
が初期化されている場合、ステートメントは読み取りMyObject = MyObject;
(何もしません) であり、それ以外の場合はMyObject = {};
です。