在节点中.js“模块”始终是一个对象
In node.js is `module` always an object?
当我看到如何检测脚本是在节点中运行还是在浏览器中运行时的示例时,我看到的逻辑如下:
if (typeof module !== 'undefined' && module.exports) {
// do something that applies to node
} else {
// do something that applies to browser
}
节点文档将全局module
列为{Object}
,我认为这意味着typeof module
应该始终"object"
。这在节点中总是正确的吗?如果是这样,执行以下检测逻辑不是更有意义吗:
if (typeof module === 'object' && module.exports) {
// do something that applies to node
} else {
// do something that applies to browser
}
是的,到目前为止,在所有节点版本中,module
一直是一个对象,并且对于所有 0.x 版本都可能保持这种状态。至于检查它是否是一个特定的对象而不是未定义的对象是否有意义,这主要是风格问题。在前面的例子中,由于代码可能只关心向module.exports
添加属性,因此它比编码更具表现力且不那么脆弱。例如,在节点的未来版本中,也许module
成为一个函数。在这种情况下,前一个示例仍然有效,而后一个示例需要稍作更改。
第二个片段可能会正常工作。 但是,不,我认为这更有意义。 你更关心它的存在,而不是你关心它是什么。 在javascript中检查是否存在的标准方法是:
typeof myVar !== 'undefined'
所以这里有一些JS约定在起作用。
相关文章:
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- AngularJS&JSON-从Previous&下一个对象
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 你能用来自数组的属性名称生成一个对象吗
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Protractor:element.getText()返回一个对象,而不是String
- 如何使用jQuery添加另一个对象的高度作为边距
- 计算从一个对象到另一个对象的路径并沿其移动
- 如何将一个对象添加到每个对象数组中
- 节点模块对象范围:在所有函数之间共享一个对象
- 在节点中.js“模块”始终是一个对象
- requireJS包含返回另一个类似模块中的对象的模块
- 如果一个nodejs模块将一个对象导出到另外两个模块,那么在一个下游模块中对该对象所做的更改是否会传播到另一个下游模块
- 对象.创建一个使用模块模式的新对象
- 如何在require.js中传递一个对象给一个模块