是什么让jQuery对象在Chrome的开发人员工具中显示为一个数组?

时间:2011-08-31 18:30:45

标签: jquery arrays google-chrome instance

我想知道jQuery对象如何在Chrome中的开发者工具的控制台日志中显示为数组。

E.g。如果我执行$('<a>'),我在控制台日志中看到的是:

[<a>​</a>​]

但以下陈述是错误的:

var a = $("<a>");

Array.isArray(a);   // false
a instanceof Array; // false

我试图修改jQuery并看看会发生什么,令人惊讶的一件事是从jQuery函数中删除length会删除数组符号:

length: 0, // commenting this line removes array notation

相反,它会显示为(箭头是要展开的实体):

> jQuery.jQuery.fn.jQuery.init

但是,如果我尝试创建我自己的应该以数组表示法显示的构造函数,它就不起作用:

var test = function() { this.length = 0 };

new test();

// Logged (arrow is same one as before):
// > test

所以我想知道jQuery代码中的什么使Developer Tools将实例显示为数组。在jQuery中添加了什么属性/函数/东西,使得Developer Tools在显示实例时将其作为数组处理?

2 个答案:

答案 0 :(得分:11)

来自http://api.jquery.com/jQuery.makeArray/

  

jQuery和JavaScript中的许多方法都会返回类似数组的对象。例如,jQuery工厂函数$()返回一个jQuery对象,该对象具有数组的许多属性(长度,[]数组访问运算符等),但与数组不完全相同,缺少一些数组的内置方法(如.pop()和.reverse())。

基本上,对象必须具有类似于数组的lengthsplice属性。以下是相关的SO问题:Array Like Objects in Javascript

答案 1 :(得分:4)

你可能知道这一点,但是console.log没有“按原样”显示传递的内容,它试图“智能”并进行一些后期处理。如果您希望“按原样”查看原始对象,则可以使用console.dir方法。