Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在node.js中,为什么有util.isArray和Array.isArray?_Javascript_Arrays_Node.js - Fatal编程技术网

Javascript 在node.js中,为什么有util.isArray和Array.isArray?

Javascript 在node.js中,为什么有util.isArray和Array.isArray?,javascript,arrays,node.js,Javascript,Arrays,Node.js,我刚刚注意到为util.isArray提供的API文档 如果给定的“对象”是数组,则util.isArray(object)#返回true 否则就错了 但是,不同的ECMAScript是如何正常的呢 虽然Node.js源代码同时使用这两种方法,但是util.isArray在内部使用Array.isArray) 在util.js中: function isArray(ar) { return Array.isArray(ar); } exports.isArray = isArray; 这是

我刚刚注意到为
util.isArray
提供的API文档

如果给定的“对象”是数组,则util.isArray(object)#返回true

否则就错了

但是,不同的ECMAScript是如何正常的呢


虽然Node.js源代码同时使用这两种方法,但是
util.isArray
在内部使用
Array.isArray

util.js
中:

function isArray(ar) {
  return Array.isArray(ar);
}
exports.isArray = isArray;

这是出于一致性的原因

node.js具有
util.isFunction()
util.isObject()
util.isArray()
和许多类似的函数。这样,类型检查将看起来彼此相似,而不是每次都使用不同的代码。

是正确的,但那是一周前的事了。现在它们都是一样的,或者会在适当的时候出现

> Array.isArray === util.isArray;
true
要真正回答为什么存在
util.isArray
,我们需要上一节历史课

当它运行时,它所做的不仅仅是调用
Array.isArray

function isArray (ar) {
  return ar instanceof Array
      || Array.isArray(ar)
      || (ar && ar !== Object.prototype && isArray(ar.__proto__));
}
这是UTIL中的一个局部函数,实际上直到v0.6.0才出现

在此表单中,
util.isArray
处理了
Array.isArray
不:

> x = [1,2,3]
[ 1, 2, 3 ]
> y = Object.create(x)
[ , ,  ]
> Array.isArray(y)
false
> Array.isArray(Object.getPrototypeOf(y))
true
关于
util.isArray
的这种行为,大家一致认为这种行为实际上是不好的,因为
y
并不是真正的
数组

function isArray (ar) {
  return ar instanceof Array
      || Array.isArray(ar)
      || (ar && ar !== Object.prototype && isArray(ar.__proto__));
}
因此,原型检查功能是使用
Array.isArray
和检查参数的

但是,检查[[Class]]实际上是重复的工作,因为[[code>Array.isArray
检查[[Class]]也是重复的工作,所以最终也是重复的,只剩下对
Array.isArray
的调用

function isArray (ar) {
  return ar instanceof Array
      || Array.isArray(ar)
      || (ar && ar !== Object.prototype && isArray(ar.__proto__));
}
今天,
util.isArray
只是
Array.isArray
的一部分

function isArray (ar) {
  return ar instanceof Array
      || Array.isArray(ar)
      || (ar && ar !== Object.prototype && isArray(ar.__proto__));
}

因此,换句话说,
util.isArray
的存在主要是一个遗留问题,可以安全地忽略。

这是推测性的,也是不正确的
Array.isArray
主要用于整个节点核心,尽管也有一些
util.isArray
调用分散在整个节点中(为了保持一致性)
util.isArray
是,不是因为它在其他核心模块中使用。仅在util.js内部使用
isArray
仅在util内部使用
isArray
,并且它比自从引入util的
isArray
以来的任何版本都旧。如果这行代码是今天编写的,那么它将只调用
Array.isArray
.util。目前为止,util已被弃用。对于用户而言,我在哪里可以了解
y=Object.create(x)
x
之间的差异?链接的线程显示成员函数不同。另外,在首次实现添加
util.isArray
时,它不会失败,因为
util.isArray(y)
Array.isArray(y)
的调用会失败?
对象。create
实例化一个新对象,并将其原型设置为作为第一个参数传递的对象。这是一种实现经典继承或实例化对象而不调用其构造函数的方法。更多信息和…不,
isArray
的第一个实现使用了短路或运算符(
|
)。因此,如果参数是数组的instanceof,它将返回true。如果不是,它将调用
Array.isArray
,如果为true则返回。如果没有,那么它将执行原型检查并返回true或false。哈哈,我认为我的坏消息忽略了这一点太快了。
+1
挖掘
数组。isArray
实现的额外收益。我希望有更多这样的答案!(令人惊讶的是,我不得不在一个加号附近工作。我希望这样能减少这种法西斯式的比扎罗内容控制)。