【问题标题】:Unusual node.js behavior不寻常的 node.js 行为
【发布时间】:2012-06-18 20:54:16
【问题描述】:

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

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

(function(exports){

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

})(param);

而且这个日志返回 true。

谁能解释我这样的行为?

提前致谢。

【问题讨论】:

  • 你期待什么?
  • 嗯,也许是错的,但我认为 ((typeof module ..) || {}) 会返回 true,但不会返回“exports”对象

标签: javascript node.js


【解决方案1】:

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

然后将exportsmodule.exports 进行比较,它们是相同的,因为module.exports 是对象最初的来源。

(exports 不会与module.exports 相同,如果它在其他地方运行(例如,您获得window 的浏览器,而不是module),因为{} 将被分配给param .)


更新有关问题的回复:

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

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

typeof module !== "undefined" 为真,因此它测试module.exports,它也为真,因此它返回module.exports

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

【讨论】:

  • Hmm.. 我真的以为编译器做的第一件事就是将子表达式 (typeof param == 'undefined', module.exports) 转换为布尔值,然后比较转换后的值,最后返回结果 (在这种情况下,true && true = true)。这是我史诗般的失败。非常感谢。
【解决方案2】:
var d = (a && b) || c

如果a 为真,则d 的计算结果为b。如果a 为假,d 的计算结果为c

【讨论】:

    猜你喜欢
    • 2011-10-26
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2016-11-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多