为什么在node.js v4.0.0中不build议使用util.is *函数?

节点v4.0.0已经发布。 此版本的节点不赞成util.isArrayutil.isRegEx ,util等许多函数。 isDateutil.isBoolean等等。

我想知道为什么发生这个节点?

在ES6中有这些东西的本机支持吗?

还是节点提供更好的解决scheme,而不是这些东西?

最后决定弃用util.is*()函数,最初是在2015年4月在Node.js技术指导委员会(TSC)进行的。那么,在那个时候,它仍然是io.js,但同一个委员会现在Node.js TSC和他们正在讨论的代码库就是Node.js 4.0.0。

会议logging在线。 所以你可以自己阅读,看看被称重的利弊。 伯特·贝尔德(Bert Belder)在这些会议logging中最清楚地表明了这个问题:

我们想贬低这些的原因是,我们并不是真的想要解决这个问题,因为这样做会落后于不相容,所以这太大了,不能成为核心。

(不幸的是,会议logging中似乎有些遗漏,我会看看是否可以从其他来源挖掘更多的背景,如果我发现有用的话,我会更新这个答案。)

更新: 从2月份的一些TSC会议logging和从同一个月的拉取请求中的讨论来看,似乎这样的推理是这样的:

嘿,看起来像util.isObject()函数返回false 这是不正确的。 一个函数是一个对象。 它应该返回true 但是,这种改变可能会破坏Node生态系统的大部分。 想想那些可能依赖于这种行为的npm上的所有模块。 为了不冒险以惊人的方式破坏生态系统,我们不得不以某种方式让大量的人来审查他们的代码。 而突破性的变化将完全是倒退不相容的。 所有这一切都是为了方便的function,甚至不属于核心内容,也很容易由用户级模块提供。 (例如,请参阅core-util-is 。)为了修复util.isObject() ,我们不要引入一个重大更改和一个semver主要颠簸,让我们先做本来应该做的事,甚至不要它在核心。

我认为也许还有一种感觉,在util.is*()函数中可能存在潜在的其他angular落案例。

总的来说,项目的理念是拥有最小的核心。 所有的东西都是平等的,如果用户模块提供的东西没有太多的麻烦,它应该在用户模块而不是核心模块中。

好的,那是我从一些文本中抽取了很多推论,但是我认为这或多或less是因为弃用而引起的。

不是node.js专家,但是这些function(如果他们按照名称说的话)可以很容易地被replace

 [] instanceof Array; // true /* or */ Array.isArray([]); // true (/(?:)/g) instanceof RegExp; // true new Date() instanceof Date; // true new Boolean(true) instanceof Boolean; // true /* or */ typeof false == 'boolean'; /* or even */ var bool1 = true, bool2 = false; !!bool1 === bool1; // true !!bool2 === bool2; // true 

根据变更日志 :

util.is*()函数已被弃用,从本版本文档中的弃用警告开始,鼓励用户在npmregistry中寻找更强大的替代方法。

他们链接这个拉请求 ,其中包含导致这个对话的一些推理,指出:

我们想贬低这些的原因是,我们并不是真的想要解决这个问题,因为这样做会落后于不相容,所以这太大了,不能成为核心。

总而言之,这些function在某种意义上是错误的,而不是修复错误并破坏向后兼容性,而是决定不使用它们。

如果你真的需要经常检查这些东西,你可以根据自己的意愿编写自己的函数。