我正在使用一个名为 horseman 的 npm 模块这基本上是 Node.js 的 PhantomJS。当我控制台记录骑士对象的内容时,它包含有关当前页面的各种数据。所有这些数据中都包含页面所有资源及其 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 中的一种特殊类型的对象(如 RegExp
或 Date
实例),它们可以分配任意属性给他们。当然,for 循环只会考虑其 .length
并迭代整数索引,但这并不能阻止对象包含任何内容。 console.log
通常会以您发现的样式显示此类数组。
但是应该注意的是,像这样滥用数组 is considered a very bad practise 。您应该向模块提交错误并告诉他们使用对象会更好 Map
s作为集合。
关于javascript - 是否存在数组/对象混合体之类的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38215276/