我刚刚注意到Node.js v0.10.26的API文档提供了util.isArray
如果给定的“对象”是数组,则util.isArray(object)#返回true
否则就错了
var util=require(’util’);
util.isArray([]))
//真的
util.isArray(新数组)
//真的
util.isArray({})
//假的
但是,不同的ECMAScript如何正常,Array.isArray
>;Array.isArray([]);
符合事实的
&燃气轮机;Array.isArray(新数组);
符合事实的
&燃气轮机;Array.isArray({});
错误的
要真正回答为什么存在util.isArray,我们需要上一堂历史课
当它第一次添加到节点时,它所做的不仅仅是调用Array.isArray
函数isArray(ar){
返回数组的ar实例
||Array.isArray(ar)
||(ar&;&;ar!==Object.prototype&;isArray(ar.\uuuu proto\uuuu));
}
这是UTIL中的一个本地函数,实际上直到v0.6.0才导出
在此表单中,util.isArray处理了Array.isArray不:
>;x=[1,2,3]
[ 1, 2, 3 ]
&燃气轮机;y=对象。创建(x)
[ , ]
&燃气轮机;数组。isArray(y)
错误的
&燃气轮机;Array.isArray(Object.getPrototypeOf(y))
符合事实的
这里对util.isArray的这种行为进行了一些讨论,一致认为这种行为实际上是不好的,因为y不是真正的数组
因此,原型检查功能很快就被删除,取而代之的是使用Array.isArray和参数[[Class]]]的检查
函数isArray(ar){
返回数组.isArray(ar)||
(ar的类型=='object'和objectToString(ar)=='[object Array]');
}
但是,检查[[Class]]实际上是重复的工作,因为数组.isArray也检查[[Class]]],因此它最终也被删除了–只保留对Array.isArray的调用
如今,util.isArray只是Array.isArray的别名
因此,换句话说,util.isArray的存在主要是遗留问题,可以安全地忽略