我想知道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在显示实例时将其作为数组处理?
答案 0 :(得分:11)
来自http://api.jquery.com/jQuery.makeArray/:
jQuery和JavaScript中的许多方法都会返回类似数组的对象。例如,jQuery工厂函数$()返回一个jQuery对象,该对象具有数组的许多属性(长度,[]数组访问运算符等),但与数组不完全相同,缺少一些数组的内置方法(如.pop()和.reverse())。
基本上,对象必须具有类似于数组的length
和splice
属性。以下是相关的SO问题:Array Like Objects in Javascript
答案 1 :(得分:4)
你可能知道这一点,但是console.log
没有“按原样”显示传递的内容,它试图“智能”并进行一些后期处理。如果您希望“按原样”查看原始对象,则可以使用console.dir
方法。