【问题标题】:What makes a jQuery object show up as an array in Chrome's Developer Tools?是什么让 jQuery 对象在 Chrome 的开发者工具中显示为数组?
【发布时间】:2011-08-31 18:30:44
【问题描述】:

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

例如如果我执行$('<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 代码中的什么使开发人员工具将实例显示为数组。 jQuery 中添加了哪些属性/函数/事物,使开发人员工具在显示实例时将其作为数组处理?

【问题讨论】:

    标签: jquery arrays google-chrome instance


    【解决方案1】:

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

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

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

    【讨论】:

    • 为了证明这一点,您可以在控制台中运行console.log({'0': 'asd','1': 'asd', length: 2, splice: function () {}})
    • 任何人都知道为什么 Chrome 对待 splice 的方式不同吗?仅供参考,这仅适用于 Chrome,但不适用于其他浏览器。
    【解决方案2】:

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

    【讨论】:

    • 我知道console 的能力;我只是想知道 jQuery 是如何让自己显示为一个数组而不是一个数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2022-01-23
    • 2014-02-20
    • 2015-05-24
    • 2013-10-26
    • 1970-01-01
    相关资源
    最近更新 更多