有没有像数组/对象混合的东西?
我使用了一个名为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)
true
但responses.length
变为0
。
这是什么?
完整的骑士对象的完整控制台日志在这里: https : //gist.github.com/tylertrotter/be8da3e777c16a2b631d9de9fc94f70b
有这样的事吗? 不, 每个数组都是这个东西。
Array
只是JS中的一种特殊types的对象(如RegExp
或Date
实例),并且可以赋予它们任意的属性。 当然,for循环只会考虑它的.length
和迭代整数索引,但是这并不妨碍对象包含任何东西。 console.log
通常会以您发现的风格显示这样的数组。
但应该指出,滥用这样的数组被认为是一个非常糟糕的做法 。 你应该向模块提交一个bug,并告诉他们使用对象更好。