今天我看到了这段代码,它在 node.js 环境中运行。(>node.exe 测试.js)
var param = (typeof module !== "undefined" && module.exports) || {};
(function(exports){
console.log(exports === module.exports);
})(param);
这个日志返回了 true。
任何人都可以向我解释这种行为吗?
提前致谢。
今天我看到了这段代码,它在 node.js 环境中运行。(>node.exe 测试.js)
var param = (typeof module !== "undefined" && module.exports) || {};
(function(exports){
console.log(exports === module.exports);
})(param);
这个日志返回了 true。
任何人都可以向我解释这种行为吗?
提前致谢。
如果module
不是未定义的(它不是因为它是默认对象)并且module.exports
是真实的事物(默认情况下是),则exports
分配给param
并传递给函数。
exports
然后与 进行比较module.exports
,它们是相同的,因为module.exports
是对象最初来自的地方。
(exports
不会与module.exports
它在其他地方运行(例如,您获得的浏览器window
,而不是module
)相同,因为{}
它将被分配给param
。)
更新对问题的评论:
嗯,也许是错的,但我认为 ((typeof module ..) || {}) 将返回 true,但不会返回“exports”对象
不会。&&
将(从左到右)评估为它测试的第一个虚假事物或(如果一切都是真实的)它测试的最后一个真实事物。
typeof module !== "undefined"
是真的,所以它测试module.exports
,这也是真的,所以它返回module.exports
。
(||
返回它测试的第一个真实或最后一个虚假的东西,所以它然后返回module.exports
)
var d = (a && b) || c
d
评估b
是否a
为真。如果a
为假,则d
评估为c
。