当前位置: 首页 > 面试题库 >

Javascript中的类似数组的对象

越勇
2023-03-14
问题内容

我想知道jQuery如何构造其类似数组的对象。我试图解决的关键问题是如何设法使控制台将其解释为数组并将其显示为数组。我知道它与length属性有关,但是在玩了一点之后我还是不太清楚。

我知道,与普通的数组(如下面的示例)相比,它没有技术优势。但是我认为这是用户进行测试和调试时的重要语义元素。

像对象一样的普通数组。

function foo(){
    // Array like objects have a length property and it's properties use integer
    // based sequential key names, e.g. 0,1,2,3,4,5,6 just like an array.
    this.length = 1;
    this[0] = 'hello'
}
// Just to make sure add the length property to the prototype to match the Array 
// prototype
foo.prototype.length = 0;

// Give the Array like object an Array method to test that it works     
foo.prototype.push = Array.prototype.push

// Create an Array like object 
var bar = new foo;

//test it 
bar.push('world');

console.log(bar);
// outputs 
{ 0: 'hello',
  1: 'world',
  length: 2,
  __proto__: foo
}

jQuery输出的位置

var jQArray = $('div')

console.log(jQArray);

// outputs
[<div></div>,<div></div>,<div></div>,<div></div>]

如果你跑

console.dir(jQArray)

// Outputs

{ 0: HTMLDivElement,
  1: HTMLDivElement,
  2: HTMLDivElement,
  3: HTMLDivElement,
  4: HTMLDivElement,
  context: HTMLDocument,
  length: 5,
  __proto__: Object[0]
 }

jQuery对象的原型特别有趣,因为它是Object而不是预期的jQuery.fn.init,而且[0]表示某些东西,因为这是您获得的东西。

console.dir([])
// outputs Array[0] as the object name or Array[x] x being the internal length of the
// Array

我不知道jQuery如何设置它的原型为Object [0],但我猜答案是在那里。任何人有任何想法吗?


问题答案:

该对象必须具有lengthsplice

> var x = {length:2, '0':'foo', '1':'bar', splice:function(){}}
> console.log(x);
['foo', 'bar']

和FYI,Object[0]作为原型的原因完全相同。浏览器将原型本身视为数组,因为:

$.prototype.length == 0;
$.prototype.splice == [].splice;


 类似资料:
  • 本文向大家介绍JavaScript 里的类数组对象,包括了JavaScript 里的类数组对象的使用技巧和注意事项,需要的朋友参考一下 很早以前我就知道可以把 arguments 转化为数组:[].slice.call(arguments),因为 arguments 是个类数组对象,所以才可以这么用。但是我一直不清楚什么叫做类数组对象( array-like objects) 今天看 Effect

  • 本文向大家介绍JavaScript中的Array 对象(数组对象),包括了JavaScript中的Array 对象(数组对象)的使用技巧和注意事项,需要的朋友参考一下  1、创建Array对象方法: --->var arr = [1,2,3];//简单的定义方法 此时可以知道 此时可以知道: 2、Array对象属性 Array常见的属性有三个:constructor、length和prototyp

  • 使用table()方法查看结构化数据并比较数据对象。 table()方法提供了一种简单的方法来查看包含类似数据的对象和数组。当调用时,它将获取到的对象属性创建为标题。每一行数据来自每个索引下的属性值。 基本示例: 记录对象的数组 在它最基本的形式中,你需要的是一个具有相同属性的对象数组。 table() 命令将完整剩下的工作: console.table([{a:1, b:2, c:3}, {a:

  • 问题内容: 我想比较JavaScript代码中2个对象数组。这些对象共有8个属性,但是每个对象都不会有一个值,并且每个数组的大小永远都不能超过8个,因此可能要使用遍历每个对象然后查看对象的值的蛮力方法。 8个属性是执行我想做的最简单的方法,但是在实现之前,我想看看是否有人有一个更优雅的解决方案。有什么想法吗? 问题答案: 编辑:您不能在JavaScript解释器的当前基于浏览器的常见实现中重载运算

  • 如何在两个属性之后对对象数组进行分组?在以下情况下是否可以使用减少? 例如:按国家和城市将以下数组分组,并对“年龄”属性求和: /*预期结果:*/

  • 问题内容: 假设您有一个非常简单的数据结构: …并且您想将其中一些存储在javascript变量中。如我所见,您有三个选择: 如果您要存储(或希望可能拥有)多个“价值”部分(例如,增加他们的年龄等),显然第二或第三种选择是可行的,因此,为了论证,让我们假设在此结构中再也不需要任何数据值了。您选择哪一个,为什么? 编辑 :该示例现在显示最常见的情况:非顺序ID。 问题答案: 每个解决方案都有其用例。