JavaScript:自动更新length属性

时间:2015-11-16 00:17:47

标签: javascript jquery arrays object properties

这实际上不是一个jQuery问题,但jQuery做了一些我希望能够用其他对象做的事情。

我注意到jQuery使用.length属性返回元素的数量。但是,jQuery对象实际上并不是一个数组,所以元素的数量自然不可用。

我假设jQuery对象对实际元素使用数字键,因为[n]返回其中一个。

添加或删除元素时,如何自动更新非数组的.length属性?或者是在jQuery添加或删除元素时手动维护?

由于

2 个答案:

答案 0 :(得分:2)

正如您所观察到的,jQuery对象实际上并不是一个数组。因此,.length属性只是由任何可能实际更改DOM对象的类数组列表的内部内容的方法手动维护。

这对jQuery对象非常容易,因为很少有方法实际更改现有jQuery对象中的DOM对象列表。在jQuery对象中的DOM元素列表上运行的大多数jQuery方法(如.filter())实际上返回一个新的jQuery对象,并且不修改原始jQuery对象。

即使像.add().slice()这样的jQuery方法也不会修改现有的jQuery对象,而是返回一个新的jQuery对象,并在其中进行适当的修改。

如果您浏览jQuery源并查看如何创建许多jQuery对象,那么对给定jQuery对象进行操作的几乎所有方法都会通过.pushStack()来调用jQuery.merge()在新的jQuery对象上设置.length属性。

如果查看主jQuery构造函数$(someSelector)的代码,它会执行某种文档查询,构建类似于内部数组的DOM节点列表,然后手动设置.length属性。

答案 1 :(得分:1)

手动维护。比较:

var l = [];
console.log(l.length); // 0
l[0] = 0;
console.log(l.length); // 1
var l = $([]);
console.log(l.length); // 0
l[0] = 0;
console.log(l.length); // 0