1

この表記法を使用して、オブジェクトが初期化されていることを確認する JavaScript があります。

MyObject = MyObject || {};

つまり、空のオブジェクトを に割り当てない場合、 MyObject が何かをチェックしますMyObject。私は JS のすべての内部構造をよく知っているわけではないので、代入で論理比較をどのように使用できるかわかりません。

それはどのように機能しますか?これを許可する他の言語はありますか?

4

3 に答える 3

2

この構文は、「MyObject定義されている場合はそれ自体に代入する。定義されていない場合は、空のオブジェクトを渡す」ことを意味します。

Javascript は未定義の値を false として扱い、定義済みの値を true として扱うため、機能します。これを論理式の遅延評価と組み合わせると、上記の動作が得られます。

于 2012-08-03T07:47:19.463 に答える
2

言語によって異なります。

たとえば、Ruby では、このスタイルを使用できます。

しかし、PHP では、論理演算子は常にブール値 (true/false) を返すため、このスタイルを使用できませんでした。

結論:

論理演算子が常にブール値を返す場合、このスタイルは使用できません。

最初の値が true と評価されたときに論理演算子が最初の値を返す場合、それ以外の場合は 2 番目の値を返す場合、このスタイルを使用できます。

于 2012-08-03T07:48:01.537 に答える
1

論理「or」演算子には短絡セマンティクスがあります。つまり、右側のオペランドは、左側のオペランドが として評価される場合にのみ評価されfalseます。したがって、MyObject 初期化されている場合、ステートメントは読み取りMyObject = MyObject;(何もしません) であり、それ以外の場合はMyObject = {};です。

于 2012-08-03T07:46:52.237 に答える