有没有像数组/对象混合的东西?

我使用了一个名为horseman的npm模块,它基本上是PhantomJS for Node。 当我控制台logging骑士对象的内容时,它拥有关于当前页面的各种数据。 包含在所有这些数据中的是一个页面的所有资源和它们的http状态代码的列表,如下所示:

responses: [ 'http://tylertrotter.com/': 301, 'http://www.tylertrotter.com/': 200, 'http://www.tylertrotter.com/css/main.css': 200, ... ] 

它看起来像一个数组/对象混合,我从来没有遇到过这样的事情。 Array.isArray(responses) trueresponses.length变为0

这是什么?

完整的骑士对象的完整控制台日志在这里: https : //gist.github.com/tylertrotter/be8da3e777c16a2b631d9de9fc94f70b

有这样事吗? 不, 每个数组都是这个东西。

Array只是JS中的一种特殊types的对象(如RegExpDate实例),并且可以赋予它们任意的属性。 当然,for循环只会考虑它的.length和迭代整数索引,但是这并不妨碍对象包含任何东西。 console.log通常会以您发现的风格显示这样的数组。

但应该指出,滥用这样的数组被认为是一个非常糟糕的做法 。 你应该向模块提交一个bug,并告诉他们使用对象更好。