-1

今日、node.js 環境で実行されているこのコードを見ました。(>node.exe test.js)

var param = (typeof module !== "undefined" && module.exports) || {};

(function(exports){

   console.log(exports === module.exports);

})(param);

そして、このログはtrueを返しました。

誰かが私にそのような行動を説明できますか?

前もって感謝します。

4

2 に答える 2

3

moduleが未定義ではなく (既定のオブジェクトであるため未定義ではありません) 、真のもの (既定では未定義) である場合module.exports、 thenexportsが割り当てられparam、関数に渡されます。

exportsは次に と比較されますが、最初に がオブジェクトの由来であるmodule.exportsため、それらは同じです。module.exports

(が割り当てられるため、他の場所で実行されている場合とexports同じにはなりません(たとえば、ではなくmodule.exportsを取得するブラウザ) 。)windowmodule{}param


質問に関する再コメントを更新します。

うーん、間違っているかもしれませんが、((typeof module ..) || {}) は true を返しますが、「エクスポート」オブジェクトは返さないと思いました

No.&&は (左から右に) テストする最初の偽物として評価するか、(すべてが真である場合) テストする最後の真のものとして評価します。

typeof module !== "undefined"が true であるため、テストします。module.exportsこれも true であるため、 を返しますmodule.exports

(||は、テストした最初の真または最後の偽を返すので、 を返しますmodule.exports)

于 2012-06-18T12:54:16.360 に答える
2
var d = (a && b) || c

dが true のb場合に評価されます。が false のa場合、 に評価されます。adc

于 2012-06-18T12:54:06.423 に答える