不寻常的node.js行为

时间:2012-06-18 12:49:41

标签: javascript node.js

今天我看到了这个在node.js环境中运行的代码。 (> node.exe test.js)

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

(function(exports){

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

})(param);

此日志返回true。

有人能解释我这样的行为吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

如果module未定义(因为它不是默认对象),而module.exports是一个真实的东西(默认情况下是这样),那么exports是分配给param并传递给函数。

然后将

exportsmodule.exports进行比较,它们是相同的,因为module.exports首先是对象的来源。

(如果exports在其他位置运行,则module.exportswindow不同(例如,您获得module的浏览器,而不是{}){{1} }}将被分配给param。)


更新对该问题的评论:

  

嗯,也许这是错的,但我认为((typeof module ..)|| {})将返回true,但不是“exports”对象

没有。 &&将(从左到右工作)评估为它测试的第一个虚假的东西,或者(如果一切都是真的)它测试的最后一个真实的东西。

typeof module !== "undefined"为真,因此它会测试module.exports,这也是正确的,因此会返回module.exports

||返回它测试的第一个真实或最后一个虚假的东西,然后它返回module.exports

答案 1 :(得分:2)

var d = (a && b) || c
如果d为真,则

b评估为a。如果a为false,则d评估为c