今天我看到了这个在node.js环境中运行的代码。 (> node.exe test.js)
var param = (typeof module !== "undefined" && module.exports) || {};
(function(exports){
console.log(exports === module.exports);
})(param);
此日志返回true。
有人能解释我这样的行为吗?
提前致谢。
答案 0 :(得分:3)
如果module
未定义(因为它不是默认对象),而module.exports
是一个真实的东西(默认情况下是这样),那么exports
是分配给param
并传递给函数。
exports
与module.exports
进行比较,它们是相同的,因为module.exports
首先是对象的来源。
(如果exports
在其他位置运行,则module.exports
与window
不同(例如,您获得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
。