gpt4 book ai didi

javascript - 在 node.js 中,为什么会有一个 util.isArray 和一个 Array.isArray?

转载 作者:IT老高 更新时间:2023-10-28 21:56:42 25 4
gpt4 key购买 nike

我刚刚注意到 Node.js v0.10.26 的 API 文档提供 util.isArray,

util.isArray(object)# Returns true if the given "object" is an Array.

false otherwise.

var util = require('util');
util.isArray([])
// true
util.isArray(new Array)
// true
util.isArray({})
// false

但是,不同的ecmascripts如何正常,Array.isArray ?

> Array.isArray([]);
true
> Array.isArray(new Array);
true
> Array.isArray({});
false

最佳答案

要真正回答为什么 util.isArray 存在,我们需要上一点历史课。

当它是 first added to node ,它所做的不仅仅是调用 Array.isArray

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

这是 utils 中的本地函数,实际上不是 exported直到 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

There's some discussion here关于 util.isArray 的这种行为,并且一致认为这种行为实际上很糟糕,因为 y 并不是真正的 Array

因此,原型(prototype)检查功能为 soon removed and replaced使用 Array.isArray 和参数的 [[Class]] 进行检查.

function isArray(ar) {
return Array.isArray(ar) ||
(typeof ar === 'object' && objectToString(ar) === '[object Array]');
}

然而,检查 [[Class]] 实际上是重复的工作,因为 Array.isArray also checks [[Class]],所以它最终也是 removed – 只留下对 Array.isArray 的调用。

今天,util.isArray 只是一个 alias Array.isArray.

也就是说,util.isArray 的存在大部分是遗留的东西,可以放心地忽略。

关于javascript - 在 node.js 中,为什么会有一个 util.isArray 和一个 Array.isArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22798826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com