作为节点v4.0.0已发布。此版本的节点已弃用了许多功能,例如util.isArray
,util.isRegEx
和util。 isDate
,util.isBoolean
等。
我想知道为什么这发生在节点上?
ES6中对这些内容有 native 支持吗?
还是节点提供了比这些东西更好的解决方案?
最佳答案
弃用util.is*()
函数的决定最初是在2015年4月由Node.js技术指导委员会(TSC)做出的。当时,仍然是io.js,但现在是Node.js,是同一个委员会他们谈论的TSC和代码库就是后来的Node.js 4.0.0。
minutes from the meeting在线。因此,您可以自己阅读它,以权衡利弊。在那几分钟内,关于该问题的最清晰的陈述可能来自Bert Belder:
(不幸的是,几分钟之内似乎缺少一些上下文。我将看看是否可以从其他来源中挖掘更多的上下文,如果发现有用的信息,我将更新此答案。)
更新:从一些TSC minutes from February和discussion in a pull request from the same month来看,似乎推理是这样的:
嘿,看起来util.isObject()
返回函数的false
。那是不对的。函数是对象。它应该返回true
。但是进行更改可能会破坏Node生态系统的大部分。考虑一下npm上所有可能依赖于该行为的模块。为了避免以令人惊讶的方式破坏生态系统的风险,我们必须以某种方式让大量的人来审查其代码。突破性的变化将完全向后不兼容。所有这些都是为了方便起见,而该功能实际上并不真正属于核心,并且可以由用户层模块轻松提供。 (例如,参见core-util-is。)与其引入突破性的变化和防止util.isObject()
的严重改变,不如让我们做应该做的事情,甚至根本不要做。
我认为util.is*()
函数中可能还潜藏着其他极端情况。
该项目的总体思路是拥有最小限度的核心。万物都是平等的,如果用户级模块可以提供一些东西而不会带来太多麻烦,那么它应该存在于用户级模块中而不是核心中。
好的,那是我从一些文本中得出了很多推论,但是我认为那是或多或少与弃用有关的。
关于javascript - 为什么在node.js v4.0.0中不推荐使用许多util.is *函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32515413/